抽象工厂模式与工厂模式

今天和同事聊天过程中,聊到了工厂模式,说来惭愧已经忘得差不多了,只记得一点点.

果断翻阅资料巩固一下.

首先要说工厂模式,工厂模式可以描述为一个产品接口,对应多个产品实现类,然后一个工厂类,根据传入值判断生成具体的实现类(可以用new生成 也可以根据类名路径反射生成).但是有一个缺点就是每当增加新的产品,增加产品实类不说,在工厂类需要修改代码.

这时候不得不提一下工厂方法模式(典型的模板模式),在工厂模式基础上将抽象出来一个抽象工厂接口,具体的实现类分别对应一个工厂实现类.这样好处是即使新增一个产品,只需要增加一个产品实现的类和工厂实现类即可.完全实现了OCP(开闭原则).

抽象工厂模式则在工厂方法模式基础上跟进一步,针对的是不同产品,即产品族,比如最近比较火的绝地求生,里边有不同的枪支,M416分别用M416枪柄和M416子弹;AKM用AKM枪柄和AKM子弹.

那么首先需要两个产品工厂接口,分别是枪柄工厂接口和子弹工厂接口.

枪柄工厂接口有两个实现类,分别是M416枪柄工厂和AKM枪柄工厂.

其次子弹工厂接口有两个实现类,分别是M416子弹工厂和AKM子弹工厂.

接着需要一个抽象工厂接口,包含了枪柄和子弹两个抽象方法

其次有两个实现类,M416实现类包含两个方法,M416枪柄和M416子弹

AKM实现类包含两个方法,AKM枪柄和AKM子弹.

总的来说,抽象工厂模式针对的是不同等级的产品,若属于同一等级,则为工厂模式.

猜你喜欢

转载自my.oschina.net/u/2462104/blog/1803427