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 总结


设计模式只是一种思想;

相关文章
|
11月前
|
设计模式 Java 开发者
23设计模式之 ---------桥接模式
23设计模式之 ---------桥接模式
74 0
|
11月前
|
设计模式
23设计模式之 --------- 什么是设计模式?
23设计模式之 --------- 什么是设计模式?
56 0
|
11月前
|
设计模式 安全 Java
23设计模式之 --------- 单例模式(二)
23设计模式之 --------- 单例模式(二)
30 0
|
11月前
|
设计模式
设计模式-----创建型模式
设计模式-----创建型模式
43 0
|
11月前
|
设计模式 存储
设计模式-----结构型模式
设计模式-----结构型模式
53 0
|
11月前
|
设计模式 算法 Java
23设计模式之 --------- 建造者模式
23设计模式之 --------- 建造者模式
72 0
|
11月前
|
设计模式 缓存 安全
23设计模式之 --------- 原型模式
23设计模式之 --------- 原型模式
57 0
|
11月前
|
设计模式 Java Linux
23设计模式之 ---------适配器模式
23设计模式之 ---------适配器模式
63 0
|
11月前
|
设计模式
23设计模式之 --------- 工厂模式(一)
23设计模式之 --------- 工厂模式(一)
48 0
|
11月前
|
设计模式 安全 Java
23设计模式之 ---------代理模式
23设计模式之 ---------代理模式
36 0