创建模式——抽象工厂模式

视频链接:https://www.bilibili.com/video/BV1J741127y6

1.概念

1.1定义

  抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,无须指定它们具体的类。它起源于以前对不同操作系统的图形化解决方案,如不同操作系统中的按钮和文本框控件其实现不同,展示效果也不一样,对于每一个操作系统,其本身就构成一个产品类,而按钮和文本框控件也构成一个产品类,两种产品类两种变化,各自有自己的特性。

1.2产品等级结构

  产品的等级结构就是产品的继承结构。

1.3产品族

  产品族是指同一个工厂生产的,位于不同产品等级结构中的一组结构。

2.结构与实现 

2.1结构

  抽象工厂模式包含以下四个角色:抽象工厂类(AbstractFactory)、具体工厂类(ConcreteFactory)、抽象产品类(AbstractProduct)、具体产品类(ConcreteProduct);下面用一个实例来展示抽象工厂模式的类图。

  假设一个微型计算机配件生产,这个的产品族有两个,一个是PC,一个是MAC。产品等级也有两个,一个是RAM,一个是CPU。类图如下:

  从图中可以看出,欸一个工厂角色都要提供两个工厂方法,分别对应于两个不同的抽象产品。有多少抽象产品,就会有多少的工厂方法。

2.2实现

public interface ComputerProducer {

    public Cpu CreatCpu();
    public Ram CreatRam();
}

public interface Ram {
    //......
}

public interface Cpu {
    //......
}

public class PcProducer implements ComputerProducer{

    @Override
    public Cpu CreatCpu() {
        Cpu pcC = new PcCpu();
        return pcC;
    }

    @Override
    public Ram CreatRam() {
        Ram pcR = new PcRam();
        return pcR;
    }

}

public class PcCpu implements Cpu {
    //......
}

public class PcRam implements Ram {
    //......
}

public class MacProducer implements ComputerProducer{

    @Override
    public Cpu CreatCpu() {
        Cpu macC = new MacCpu(); 
        return macC;
    }

    @Override
    public Ram CreatRam() {
        Ram macR = new MacRam();
        return null;
    }

}

public class MacRam implements Ram{
    //......
}

public class MacCpu implements Cpu {
    //......
}

3.优点与缺点

3.1优点

  抽象工厂模式隔离了具体类的生成,使得客户端并不需要知道什么被创建,并且当一个产品族中多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象,而且增加新的产品族很方便,无需修改已有系统,符合开闭原则。

3.2缺点

  但是在增加新的产品等级结构的时候很麻烦,需要对原有系统进行较大的修改,甚至需要修改抽象层代码,这显然会带来较大的不变,违背了开闭原则。

参考链接:https://www.jianshu.com/p/7a56b7bafbb9

     http://www.imooc.com/article/260108?block_id=tuijian_wz

 

 

 

 

 

 

 

 
posted @ 2020-03-26 20:14  kkkyl  阅读(178)  评论(0)    收藏  举报