构造型模式之Abstract Factory(抽象工厂)模式
来源:互联网 发布:淘宝网卖什么比较畅销 编辑:程序博客网 时间:2024/05/29 11:43
1.如果你期望构造一系列具有某个公共特性的对象,可使用Abstract Factory(抽象工厂)模式
2.举例(在工厂方法模式基础上添加和修改)
//工厂抽象类public abstract class Factory { abstract <T> T createProduct(T t); abstract String getFactoryName();}
//添加另外产品接口public interface IProductOther { void twe(); void setFactoryName(String string);}
//另外产品Apublic 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"); }}
//另外产品Bpublic 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->ProductAFirstFactory->ProductBSecondFactory->ProductASecondFactory->ProductOtherBone productAone ProductBaO1 == nullone productAtwe ProductOtherB
3.总结:Abstract Factory(抽象工厂)模式的意图在于创建一系列相关联或互相依赖的对象。借助该模式,可以为客户提供工厂类,每个工厂类都可用于创建一系列与某一公共主题相关的对象。
4.工厂方法模式与抽象工厂的区别
4.1工厂方法模式是对一个系列的对象进行创建,而抽象工厂模式是对工厂方法模式的扩展,使得可以对多个系列的对象进行创建
4.2在我看来,工厂模式始终是一对多关系,抽象工厂模式可以针对需求定义成可以生产所有产品的全能工厂,或者定义多个成只能生产特别产品的工厂(即多个工厂方法模式)。
参考:http://www.cnblogs.com/devinzhang/archive/2011/12/19/2293160.html这里写链接内容
0 0
- 构造型模式之Abstract Factory(抽象工厂)模式
- 创建型模式之抽象工厂模式(Abstract Factory)- 工厂方法模式(Factory Method)
- 创建型模式之抽象工厂(Abstract Factory)
- 设计模式-创建型模式之 Abstract Factory(抽象工厂)
- 创建型设计模式之抽象工厂(Abstract Factory)模式
- 【设计模式】创建型模式之抽象工厂Abstract Factory
- .Net设计模式之抽象工厂模式(Abstract Factory)
- 设计模式(二)之Abstract Factory - 抽象工厂模式
- Java设计模式之抽象工厂(Abstract Factory)模式
- JAVA设计模式之抽象工厂(Abstract Factory)模式
- .NET设计模式之抽象工厂模式(Abstract Factory)
- 代码设计模式之抽象工厂模式(Abstract Factory)
- 设计模式之二 抽象工厂模式(Abstract Factory)
- 设计模式之抽象工厂模式(Abstract Factory)
- C++设计模式之抽象工厂模式(Abstract Factory)
- 【java设计模式】之 抽象工厂(Abstract Factory)模式
- 设计模式之抽象工厂模式(Abstract Factory)
- 【java设计模式】之 抽象工厂(Abstract Factory)模式
- React - Component Compositon (2)
- 抽象的意义
- 命令行编译MapReduce程序 Hadoop2.X.X
- VC6.0如何创建以及调用动态链接库具体实例
- 剑指offer 27 字符串的排列
- 构造型模式之Abstract Factory(抽象工厂)模式
- js图片自适应宽高
- 线索化二叉树--节点空指针实现过程
- 获取当前activity的屏幕截图
- svd(奇异值分解)
- 关于synchronized以及ReetrantLock、ReentrantReadWriteLock的选择
- windows tips cmd提示符下 日期及文件压缩 脚本
- libevent - 一个奇怪的问题
- cocos-Lua07帧动画&骨骼动画