嗯,今天是工厂模式的最后一讲,可是今天不用你猜了,我已经告诉你讲什么了——抽象工厂。曾经,我们一起学习了简单工厂和工厂方法,他们有各自的优点和缺点。那么,今天是我们的抽象工厂,看看今天你能发现什么吧!?
抽象工厂在意图上是创建又相互关联或互相依赖的对象。并且,抽象工厂像是在工厂方法的基础上引入了分类管理的概念。我们用一个例子来说明:
工厂生产的所有产品都用都用大写字母来标明它们的型号,比如冰箱,就有“冰箱-A",“冰箱-B",同样,其他的产品也都是遵守这个编号规则,于是就有了一下产品家族树
冰箱:
冰箱-A
冰箱-B
洗衣机:
洗衣机-A
洗衣机-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 工厂设计模式!