嗯,今天是工厂模式的最后一讲,可是今天不用你猜了,我已经告诉你讲什么了——抽象工厂。曾经,我们一起学习了简单工厂和工厂方法,他们有各自的优点和缺点。那么,今天是我们的抽象工厂,看看今天你能发现什么吧!?

抽象工厂在意图上是创建又相互关联或互相依赖的对象。并且,抽象工厂像是在工厂方法的基础上引入了分类管理的概念。我们用一个例子来说明:

工厂生产的所有产品都用都用大写字母来标明它们的型号,比如冰箱,就有“冰箱-A",“冰箱-B",同样,其他的产品也都是遵守这个编号规则,于是就有了一下产品家族树

冰箱:



  1. 冰箱-A

  2. 冰箱-B



洗衣机:

  1. 洗衣机-A

  2. 洗衣机-B

我们为冰箱和洗衣机设计接口。

冰箱接口:
public interface IceBox {
}
洗衣机接口:
public interface Washer {
}

接下来,我们来创建具体的产品。

冰箱
public class IceBoxA implements IceBox{
public IceBoxA(){
    System.out.println("IceBoxA ...");
}
}
public class IceBoxB implements IceBox{
public IceBoxB(){
    System.out.println("IceBoxB ...");
}
}
洗衣机
public class WasherA implements Washer{
    public WasherA(){
        System.out.println("washerA ...");
    }
}
public class WasherB implements Washer{
public WasherB(){
    System.out.println("washerB ...");
}
}

到此,产品部分我们准备好了,接下来我们来处理工厂部分,我们先来定义工厂行为接口

public interface Factory {
IceBox createBox();
Washer createWasher();
}

接下来我创造具体的工厂类,我们根据上面产品的接口,把型号A的产品分为一类,由一个工厂来管理,把型号为B的产品有另一个工厂管理,根据这个分类,我们可以实现如下的两个具体工厂类

工厂A
public class FactoryA implements Factory{
    @Override
    public IceBox createBox() {
        return new IceBoxA();
    }
    @Override
    public Washer createWasher() {
        return new WasherA();
    }
}
工厂B
public class FactoryB implements Factory{
    @Override
    public IceBox createBox() {
                                                   
        return new IceBoxB();
    }
    @Override
    public Washer createWasher() {
                                                   
        return new WasherB() ;
    }
}

 好了,我的介绍完成了,你看出了什么?我猜你一定看到了分类管理的痕迹对吧!嘿嘿,很聪明哦!好吧,记住他吧,我们的抽象工厂,And 工厂设计模式!