设计模式—抽象工厂模式

本文通过实例展示了抽象工厂模式的使用,解释了如何通过该模式隔离具体产品的实现,使得在应用程序中可以方便地切换产品系列,如华为和vivo的手机与路由器。同时,也指出了抽象工厂模式的优缺点,如产品扩展困难和理解难度增加。在测试代码中,演示了如何使用工厂创建并操作不同品牌的产品。

抽象工厂

定义:抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定它们具体的类

优点:

  • 具体产品在应用层的代码隔离,无需要关心创建的细节
  • 将一个系列的产品统一到一起创建

缺点:

  • 规定了所有可能被创建的产品集合,产品簇中扩展新的产品困难
  • 增加了系统的抽象和理解难度

先来看一下抽象工厂的URL类图

在这里插入图片描述

下边我们通过一个例子来理解一下抽象工厂这个概念,有两家厂商分别是华为和vivo,它们都生产手机和路由器,我们就通过这两个产品来理解抽象工厂

先看一下各个类之间的关系

在这里插入图片描述

首先创建两个产品接口(IphoneProduct和IRouterProduct)

package com.zkw.factory.abstract1;

public interface IphoneProduct {
    public void charge();
    public void start();
    public void shutdown();
    public void call();
    public void sendSMS();
}
package com.zkw.factory.abstract1;

public interface IRouterProduct {
    public void start();
    public void shutdown();
    public void OpenWifi();
    public void CloseWifi();
}

然后华为和vivo两个厂家分别实现这个两个产品的接口

package com.zkw.factory.abstract1;

public class HuaWeiIphone implements IphoneProduct{
    @Override
    public void charge() {
        System.out.println("HuaWei手机充电");
    }

    @Override
    public void start() {
        System.out.println("HuaWei手机开机");
    }

    @Override
    public void shutdown() {
        System.out.println("HuaWei手机关机");
    }

    @Override
    public void call() {
        System.out.println("HuaWei手机打电话");
    }

    @Override
    public void sendSMS() {
        System.out.println("HuaWei手机发短信");
    }
}
package com.zkw.factory.abstract1;

public class HuaWeiIRouter implements IRouterProduct {
    @Override
    public void start() {
        System.out.println("HuaWei路由器开机");
    }

    @Override
    public void shutdown() {
        System.out.println("HuaWei路由器关机");
    }

    @Override
    public void OpenWifi() {
        System.out.println("HuaWei路由器打开WiFi");
    }

    @Override
    public void CloseWifi() {
        System.out.println("HuaWei路由器关闭WiFi");
    }
}
package com.zkw.factory.abstract1;

public class vivoIphone implements IphoneProduct {
    @Override
    public void charge() {
        System.out.println("vivo手机充电");
    }

    @Override
    public void start() {
        System.out.println("vivo手机开机");
    }

    @Override
    public void shutdown() {
        System.out.println("vivo手机关机");
    }

    @Override
    public void call() {
        System.out.println("vivo手机打电话");
    }

    @Override
    public void sendSMS() {
        System.out.println("vivo手机发短信");
    }
}
package com.zkw.factory.abstract1;

public class viovoIRouter implements IRouterProduct {
    @Override
    public void start() {
        System.out.println("vivo路由器开机");
    }

    @Override
    public void shutdown() {
        System.out.println("vivo路由器关机");
    }

    @Override
    public void OpenWifi() {
        System.out.println("vivo路由器打开WiFi");
    }

    @Override
    public void CloseWifi() {
        System.out.println("vivo路由器关闭WiFi");
    }
}

创建件超级工厂,这个工厂主要提供创建产品的接口

package com.zkw.factory.abstract1;

public interface SuperFactory {
    public IphoneProduct getIphoneProduct();
    public IRouterProduct getIRouterProduct();
}

最后两家厂商的工厂分别实现这超级工厂

package com.zkw.factory.abstract1;

public class HUaWeiFactory implements SuperFactory {
    @Override
    public IphoneProduct getIphoneProduct() {
        return new HuaWeiIphone();
    }

    @Override
    public IRouterProduct getIRouterProduct() {
        return new HuaWeiIRouter();
    }
}
package com.zkw.factory.abstract1;

public class vivoFactory implements SuperFactory{

    @Override
    public IphoneProduct getIphoneProduct() {
        return new vivoIphone();
    }

    @Override
    public IRouterProduct getIRouterProduct() {
        return new viovoIRouter();
    }
}

测试代码

package com.zkw.factory.abstract1;

public class Customer {
    public static void main(String[] args) {
        System.out.println("========vivo系列产品=========");
        vivoFactory vivoFactory = new vivoFactory();
        IphoneProduct iphoneProduct = vivoFactory.getIphoneProduct();
        System.out.println("====vivo手机产品====");
        iphoneProduct.charge();
        iphoneProduct.start();
        iphoneProduct.shutdown();
        iphoneProduct.call();
        iphoneProduct.sendSMS();
        System.out.println("====vivo路由器====");
        IRouterProduct iRouterProduct = vivoFactory.getIRouterProduct();
        iRouterProduct.start();
        iRouterProduct.shutdown();
        iRouterProduct.OpenWifi();
        iRouterProduct.CloseWifi();
        System.out.println("========HuaWei系列产品=========");
        System.out.println("====HuaWei手机产品====");
        HUaWeiFactory hUaWeiFactory = new HUaWeiFactory();
        IphoneProduct iphoneProduct1 = hUaWeiFactory.getIphoneProduct();
        iphoneProduct1.charge();
        iphoneProduct1.start();
        iphoneProduct1.shutdown();
        iphoneProduct1.call();
        iphoneProduct1.sendSMS();
        System.out.println("====HuaWei路由器====");
        IRouterProduct iRouterProduct1 = hUaWeiFactory.getIRouterProduct();
        iRouterProduct1.start();
        iRouterProduct1.shutdown();
        iRouterProduct1.OpenWifi();
        iRouterProduct1.CloseWifi();
    }
}

结果如下

在这里插入图片描述

内容概要:本文介绍了AI Agent智能体的基本概念及其应用场景,并详细讲解了如何从零开始打造AI Agent。首先,文章解释了人工智能、机器学习、深度学习等基础知识,以及大语言模型(LLM)的特点和应用。接着,文章深入探讨了AI Agent的概念、与传统程序的区别,以及其在自媒体、智能客服、自动驾驶、股票交易和游戏NPC等多个领域的应用。随后,文章以字节跳动的“扣子(COZE)”平台为例,详细介绍了打造AI Agent的七个步骤,包括需求梳理、软件选型、提示工程、数据库搭建、UI界面构建、测试评估和部署发布。最后,文章通过两个项目实战案例——抖音短视频文案转小红书笔记和小红书文案+OCR+飞书同步,展示了如何实际应用AI Agent进行内容创作和数据处理。适合人群:对AI和机器学习有一定了解的研发人员、产品经理和技术爱好者,特别是那些希望深入了解AI Agent的应用和开发过程的人群。使用场景及目标:①帮助读者理解AI Agent的基本概念及其与传统程序的区别;②指导读者如何使用COZE等平台创建自己的AI Agent;③通过具体案例展示AI Agent在内容创作和数据处理方面的实际应用。其他说明:本文不仅提供了理论知识,还结合了实际操作步骤和代码示例,帮助读者更好地理解和实践AI Agent的开发。建议读者在学习过程中结合实际项目进行实践,并尝试调整和优化各个步骤中的参数和设置,以获得最佳效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值