构造型模式之Abstract Factory(抽象工厂)模式
2016-04-08 15:56
344 查看
1.如果你期望构造一系列具有某个公共特性的对象,可使用Abstract Factory(抽象工厂)模式
2.举例(在工厂方法模式基础上添加和修改)
3.总结:Abstract Factory(抽象工厂)模式的意图在于创建一系列相关联或互相依赖的对象。借助该模式,可以为客户提供工厂类,每个工厂类都可用于创建一系列与某一公共主题相关的对象。
4.工厂方法模式与抽象工厂的区别
4.1工厂方法模式是对一个系列的对象进行创建,而抽象工厂模式是对工厂方法模式的扩展,使得可以对多个系列的对象进行创建
4.2在我看来,工厂模式始终是一对多关系,抽象工厂模式可以针对需求定义成可以生产所有产品的全能工厂,或者定义多个成只能生产特别产品的工厂(即多个工厂方法模式)。
参考:http://www.cnblogs.com/devinzhang/archive/2011/12/19/2293160.html这里写链接内容
2.举例(在工厂方法模式基础上添加和修改)
//工厂抽象类 public abstract class Factory { abstract <T> T createProduct(T t); abstract String getFactoryName(); }
//添加另外产品接口 public interface IProductOther { void twe(); void setFactoryName(String string); }
//另外产品A public class ProductOtherA implements IProductOther{ @Override public void twe() { // TODO Auto-generated method stub System.out.println("twe ProductOtherA"); } @Override public void setFactoryName(String string) { // TODO Auto-generated method stub System.out.println(string + "->" + "ProductOtherA"); } }
//另外产品B public class ProductOtherB implements IProductOther{ @Override public void twe() { // TODO Auto-generated method stub System.out.println("twe ProductOtherB"); } @Override public void setFactoryName(String string) { // TODO Auto-generated method stub System.out.println(string + "->" + "ProductOtherB"); } }
//第一个工厂:只能生产IProduct相关产品 public class FirstFactory extends Factory{ @Override <T> T createProduct(T t) { // TODO Auto-generated method stub T product = null; try { product = (T)Class.forName(t.getClass().getName()).newInstance(); if(product instanceof IProduct){ ((IProduct) product).setFactoryName(getFactoryName()); return product; } } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override String getFactoryName() { // TODO Auto-generated method stub return "FirstFactory"; } }
//第二个工厂:可以生产所有产品的全能工厂 public class SecondFactory extends Factory{ @Override <T> T createProduct(T t) { // TODO Auto-generated method stub T product = null; try { product = (T)Class.forName(t.getClass().getName()).newInstance(); if(product instanceof IProduct){ ((IProduct) product).setFactoryName(getFactoryName()); } else if (product instanceof IProductOther) { ((IProductOther) product).setFactoryName(getFactoryName()); } } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }; return product; } @Override String getFactoryName() { // TODO Auto-generated method stub return "SecondFactory"; } }
//测试类 public class Test { public static void main(String[] args){ Factory ff = new FirstFactory(); IProduct a1 = ff.createProduct(new ProductA()); IProduct b1 = ff.createProduct(new ProductB()); IProductOther aO1 = ff.createProduct(new ProductOtherA()); Factory sf = new SecondFactory(); IProduct a2 = sf.createProduct(new ProductA()); IProductOther bO2 = sf.createProduct(new ProductOtherB()); if(a1 != null){ a1.one(); } else { System.out.println("a1 == null"); } if(b1 != null){ b1.one(); } else { System.out.println("b1 == null"); } if(aO1 != null){ aO1.twe(); } else { System.out.println("aO1 == null"); } if(a2 != null){ a2.one(); } else { System.out.println("a2 == null"); } if(bO2 != null){ bO2.twe(); } else { System.out.println("bO2 == null"); } } }
//结果 FirstFactory->ProductA FirstFactory->ProductB SecondFactory->ProductA SecondFactory->ProductOtherB one productA one ProductB aO1 == null one productA twe ProductOtherB
3.总结:Abstract Factory(抽象工厂)模式的意图在于创建一系列相关联或互相依赖的对象。借助该模式,可以为客户提供工厂类,每个工厂类都可用于创建一系列与某一公共主题相关的对象。
4.工厂方法模式与抽象工厂的区别
4.1工厂方法模式是对一个系列的对象进行创建,而抽象工厂模式是对工厂方法模式的扩展,使得可以对多个系列的对象进行创建
4.2在我看来,工厂模式始终是一对多关系,抽象工厂模式可以针对需求定义成可以生产所有产品的全能工厂,或者定义多个成只能生产特别产品的工厂(即多个工厂方法模式)。
参考:http://www.cnblogs.com/devinzhang/archive/2011/12/19/2293160.html这里写链接内容
相关文章推荐
- javascript抽象工厂模式详细说明
- 学习php设计模式 php实现抽象工厂模式
- JavaScript设计模式之抽象工厂模式介绍
- Python设计模式之抽象工厂模式
- Head First -- 抽象工厂模式
- Abstract Factory Pattern(抽象工厂模式)——莫勇鹏老师
- 抽象工厂模式——探索之旅
- 创建型模式之抽象工厂模式
- 抽象工厂模式(未完成)(未看代码,只填了使用场景)
- 设计模式之-抽象工厂模式VS简单工厂模式(python)
- java设计模式学习笔记-抽象工厂模式
- 设计模式学习笔记——抽象工厂模式
- 抽象工厂模式
- 抽象工厂模式(Abstract Factory Pattern)小结
- Java--设计模式之抽象工厂模式
- 抽象工厂模式
- 设计模式 抽象工厂模式(Abstract Factory Pattern)
- 简单工厂模式、工厂方法模式、抽象工厂模式这三种工厂模式的实例及其闭合原则。
- 工厂三兄弟之抽象工厂模式
- 设计模式之抽象工厂模式