23设计模式之 --------- 工厂模式(二)

简介: 23设计模式之 --------- 工厂模式(二)

1.3 抽象工厂模式



Creator: 定义了产品生产的一系列行为;

ConcreteCreator1: 工厂1

ConcreteCreator2:工厂2

不同的工厂生产不同的东西;


ProductA: 抽象接口方法

ProductB:抽象接口方法


ProductA1:

ProductA2:

ProductB1:

ProductB2:


具体的抽象的方法(也就是具体的产品)他们是工厂创建的(ConcreteCreator)



产品等级和产品族如图上会帮助大家更好的理解;


小米手机和华为属于同一的产品等级结构;

小米手机和小米路由器属于同一家族;


相对固定的产品族可以考虑使用使用抽象工厂的模式经常变动的话就并不推荐了;


按照图形逻辑我们来实现下:


代码结构如下:

IphoneProduct

//手机产品接口
public interface IphoneProduct {
     void start();//开机
     void shutdown();//关机
     void callup();//打电话
     void sendms();//发短信
}


XiaomiIphone

public class XiaomiIphone implements IphoneProduct{
    @Override
    public void start() {
        System.out.println("小米手机开机");
    }
    @Override
    public void shutdown() {
        System.out.println("小米手机关机");
    }
    @Override
    public void callup() {
        System.out.println("小米手机打电话");
    }
    @Override
    public void sendms() {
        System.out.println("小米手机发短信");
    }
}


HuweiIphone


public class HuweiIphone implements IphoneProduct{
    @Override
    public void start() {
        System.out.println("华为手机开机");
    }
    @Override
    public void shutdown() {
        System.out.println("华为手机关机");
    }
    @Override
    public void callup() {
        System.out.println("华为手机打电话");
    }
    @Override
    public void sendms() {
        System.out.println("华为手机发短信");
    }
}


IRouterProduct


public interface IRouterProduct {
    void start();//开机
    void shutdown();//管家
    void callup();//开机
    void seeting();//设置
}


HuweiRouter

public class HuweiRouter implements IRouterProduct{
    @Override
    public void start() {
        System.out.println("华为路由器开机");
    }
    @Override
    public void shutdown() {
        System.out.println("华为路由器关机");
    }
    @Override
    public void callup() {
        System.out.println("华为路由器打电话");
    }
    @Override
    public void seeting() {
        System.out.println("华为路由器设置");
    }
}


XiaomiRouter

public class XiaomiRouter implements IRouterProduct{
    @Override
    public void start() {
        System.out.println("小米路由器开机");
    }
    @Override
    public void shutdown() {
        System.out.println("小米路由器关机");
    }
    @Override
    public void callup() {
        System.out.println("小米路由器打电话");
    }
    @Override
    public void seeting() {
        System.out.println("小米路由器设置");
    }
}


IProductFactory 抽象产品工厂


//抽象产品工厂
public interface IProductFactory {
    //手机工厂
    IphoneProduct IphoneProduct();
   //路由器工厂
    IRouterProduct IRouterProduct();
}


HuaweiFactory

public class HuaweiFactory implements IProductFactory{
    @Override
    public IphoneProduct IphoneProduct() {
        return new HuweiIphone();
    }
    @Override
    public IRouterProduct IRouterProduct() {
        return new HuweiRouter();
    }
}


XiaomiFactory


public class XiaomiFactory implements IProductFactory{
    @Override
    public IphoneProduct IphoneProduct() {
        return new XiaomiIphone();
    }
    @Override
    public IRouterProduct IRouterProduct() {
        return new XiaomiRouter();
    }
}


Client 控制台


public class Client {
    public static void main(String[] args) {
        System.out.println("-----------------------小米产品----------------------");
         XiaomiFactory xiaomiFactory = new XiaomiFactory();
         IphoneProduct iphoneProduct = xiaomiFactory.IphoneProduct();
          iphoneProduct.start();
          iphoneProduct.callup();
          iphoneProduct.sendms();
         IRouterProduct iRouterProduct = xiaomiFactory.IRouterProduct();
         iRouterProduct.seeting();
         iRouterProduct.shutdown();
         iRouterProduct.start();
        System.out.println("-----------------------华为产品----------------------");
        HuaweiFactory huaweiFactory = new HuaweiFactory();
        IphoneProduct iphoneProduct1 = huaweiFactory.IphoneProduct();
        iphoneProduct1.start();
        iphoneProduct1.callup();
        iphoneProduct1.sendms();
        IRouterProduct iRouterProduct2 = huaweiFactory.IRouterProduct();
        iRouterProduct2.seeting();
        iRouterProduct2.shutdown();
        iRouterProduct2.start();
    }
}


运行结果如下:


其实写完代码;我个人对抽象接口的理解就是一个接口一个实现;老子管儿子,儿子管孙子这么一个概念;接口不断的封装继续;其实大型项目结构稳定的使用是ok的经常变化的你今天加几个接口明天加几个也很麻烦,根据自己的业务逻辑自行判断吧;


1.4 总结


设计模式只是一种思想;

相关文章
|
3月前
|
设计模式 uml C语言
设计模式----------工厂模式之简单工厂模式(创建型)
这篇文章详细介绍了简单工厂模式,包括其定义、应用场景、UML类图、通用代码实现、运行结果、实际应用例子,以及如何通过反射机制实现对象创建,从而提高代码的扩展性和维护性。
设计模式----------工厂模式之简单工厂模式(创建型)
|
3月前
|
设计模式 uml
设计模式-------------工厂模式之工厂方法模式(创建型)
工厂方法模式是一种创建型设计模式,它通过定义一个用于创建对象的接口,让子类决定实例化哪一个类,从而实现类的实例化推迟到子类中进行,提高了系统的灵活性和可扩展性。
|
3月前
|
设计模式 Java C语言
设计模式-----------工厂模式之抽象工厂模式(创建型)
抽象工厂模式是一种创建型设计模式,它提供了一个接口用于创建一系列相关或相互依赖的对象,而无需指定具体类,从而增强了程序的可扩展性并确保客户端只使用同一产品族的产品。
设计模式-----------工厂模式之抽象工厂模式(创建型)
|
设计模式
23设计模式之 --------- 什么是设计模式?
23设计模式之 --------- 什么是设计模式?
86 0
|
设计模式 安全 Java
23设计模式之 --------- 单例模式(二)
23设计模式之 --------- 单例模式(二)
45 0
|
设计模式
设计模式-----创建型模式
设计模式-----创建型模式
68 0
|
设计模式 存储
设计模式-----结构型模式
设计模式-----结构型模式
71 0
|
设计模式 算法 Java
23设计模式之 --------- 建造者模式
23设计模式之 --------- 建造者模式
93 0
|
设计模式 缓存 安全
23设计模式之 --------- 原型模式
23设计模式之 --------- 原型模式
74 0
|
设计模式
23设计模式之 --------- 工厂模式(一)
23设计模式之 --------- 工厂模式(一)
74 0