一:抽象工厂模式的优点
--->抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广。
--->假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产品等级结构。那么为了将消费这些产品对象的责任和创建这些产品对象的责任分割开 来,可以引进抽象工厂模式。这样的话,消费产品的一方不需要直接参与产品的创建工作,而只需要向一个公用的工厂接口请求所需要的产品。
--->通过使用抽象工厂模式,可以处理具有相同(或者相似)等级结构中的多个产品族中的产品对象的创建问题。
二:抽象工厂模式的缺点
--->
三:应用场景
--->/**
* 抽象工厂
* @author sxf
* 产品等级概念:intel的cpu 和amd的cpu是一个产品等级的。
* intel的主板 和amd的cpu是一个产品等级的。
*
* 产品族的概念:intel的cpu 和主办 是一个产品族的
* amd的cpu 和主板 是一个产品族的。
*
* 简单工厂模式:[纵向划分]
* (1)面对的生成同一个等级的不同产品。比如:传入不同参数,生成intel的cpu或是amd的cpu
* (2)只有一个核心工厂类,判断比较多,业务复杂,扩展改变核心类,麻烦。
*
* 工厂方法模式:[纵向划分]
* (1)面对的生成同一个等级的不同产品。
* (2)一个产品有一个自己的工厂类。新增加一个产品,就多一个具体的工厂类。
* (3)产品单一,属于一个等级的产品
*
* 抽象工厂模式:[横向划分]
* (1)面对的生成同一个族的产品
* (2)一个产品族有一个自己的工厂类。
* (3)intel的工厂:生产cpu,主板,内存。amd的工厂:生产cpu,主板,内存
*
*/
四:抽象工厂模式的角色演变
五:抽象工厂模式的代码示例
[1]抽象工厂
1 package com.yeepay.sxf.interfaces; 2 /** 3 * 抽象工厂 4 * @author sxf 5 * 产品等级概念:intel的cpu 和amd的cpu是一个产品等级的。 6 * intel的主板 和amd的cpu是一个产品等级的。 7 * 8 * 产品族的概念:intel的cpu 和主办 是一个产品族的 9 * amd的cpu 和主板 是一个产品族的。 10 * 11 * 简单工厂模式:[纵向划分] 12 * (1)面对的生成同一个等级的不同产品。比如:传入不同参数,生成intel的cpu或是amd的cpu 13 * (2)只有一个核心工厂类,判断比较多,业务复杂,扩展改变核心类,麻烦。 14 * 15 * 工厂方法模式:[纵向划分] 16 * (1)面对的生成同一个等级的不同产品。 17 * (2)一个产品有一个自己的工厂类。新增加一个产品,就多一个具体的工厂类。 18 * 19 * 抽象工厂模式:[横向划分] 20 * (1)面对的生成同一个族的产品 21 * (2)一个产品族有一个自己的工厂类。intel的工厂:生产cpu,主板,内存。amd的工厂:生产cpu,主板,内存 22 * 23 */ 24 public interface AbstartFactoryForGroup { 25 /** 26 * 创建cpu的部门 27 * @param cpu 28 * @return 29 */ 30 public Cpu create(String cpu); 31 /** 32 * 创建主板的部门 33 * @param cpu 34 * @return 35 */ 36 public ZhuBan create(Cpu cpu); 37 }
[2]不同的工厂
1 package com.yeepay.sxf.interfaces.impl; 2 3 import com.yeepay.sxf.interfaces.AbstartFactoryForGroup; 4 import com.yeepay.sxf.interfaces.Cpu; 5 import com.yeepay.sxf.interfaces.ZhuBan; 6 7 /** 8 * intel的工厂 9 * @author sxf 10 * 11 */ 12 public class IntelFactory implements AbstartFactoryForGroup{ 13 /** 14 * 创建cpu 15 */ 16 @Override 17 public Cpu create(String cpu) { 18 // TODO Auto-generated method stub 19 return null; 20 } 21 /** 22 * 创建主板 23 */ 24 @Override 25 public ZhuBan create(Cpu cpu) { 26 // TODO Auto-generated method stub 27 return null; 28 } 29 } 30 31 32 package com.yeepay.sxf.interfaces.impl; 33 34 import com.yeepay.sxf.interfaces.AbstartFactoryForGroup; 35 import com.yeepay.sxf.interfaces.Cpu; 36 import com.yeepay.sxf.interfaces.ZhuBan; 37 /** 38 * AMD的工厂 39 * @author sxf 40 * 41 */ 42 public class AmdFactory implements AbstartFactoryForGroup{ 43 44 @Override 45 public Cpu create(String cpu) { 46 // 创建其cpu的实现 47 return null; 48 } 49 50 @Override 51 public ZhuBan create(Cpu cpu) { 52 //创建其主板的实现 53 return null; 54 } 55 56 57 }
[3]产品接口
1 package com.yeepay.sxf.interfaces; 2 /** 3 * cpu接口 4 * @author sxf 5 * 6 */ 7 public interface Cpu { 8 public String readNeicun(String neicun); 9 } 10 11 12 package com.yeepay.sxf.interfaces; 13 /** 14 * 主板接口 15 * @author sxf 16 * 17 */ 18 public interface ZhuBan { 19 public String readCpu(Cpu cpu); 20 }