设计模式-> 抽象工厂
来源:互联网 发布:淘宝上的伟哥是真的吗 编辑:程序博客网 时间:2024/04/19 07:46
1 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
2 在以下情况可以使用Abstract Factory模式
• 一个系统要独立于它的产品的创建、组合和表示时。• 一个系统要由多个产品系列中的一个来配置时。
• 当你要强调一系列相关的产品对象的设计以便进行联合使用时。
• 当你提供一个产品类库,而只想显示它们的接口而不是实现时。
3 结构
4 代码示例
abstract class AbstractProductA{public abstract void operationA1();public abstract void operationA2();}class ProductA1 extends AbstractProductA{ProductA1(String arg){System.out.println("Hello "+arg);} // Implement the code herepublic void operationA1() { };public void operationA2() { };}class ProductA2 extends AbstractProductA{ProductA2(String arg){System.out.println("Hello "+arg);} // Implement the code herepublic void operationA1() { };public void operationA2() { };}abstract class AbstractProductB{//public abstract void operationB1();//public abstract void operationB2();}class ProductB1 extends AbstractProductB{ProductB1(String arg){System.out.println("Hello "+arg);} // Implement the code here}class ProductB2 extends AbstractProductB{ProductB2(String arg){System.out.println("Hello "+arg);} // Implement the code here}abstract class AbstractFactory{abstract AbstractProductA createProductA();abstract AbstractProductB createProductB();}class ConcreteFactory1 extends AbstractFactory{AbstractProductA createProductA(){return new ProductA1("ProductA1");}AbstractProductB createProductB(){return new ProductB1("ProductB1");}}class ConcreteFactory2 extends AbstractFactory{AbstractProductA createProductA(){return new ProductA2("ProductA2");}AbstractProductB createProductB(){return new ProductB2("ProductB2");}}class FactoryMaker{private static AbstractFactory pf=null;static AbstractFactory getFactory(String choice){if(choice.equals("a")){pf=new ConcreteFactory1();}else if(choice.equals("b")){pf=new ConcreteFactory2();} return pf;}}public class Client{public static void main(String args[]){AbstractFactory pf=FactoryMaker.getFactory("a");AbstractProductA product=pf.createProductA();//more function calls on product}}
5 抽象工厂模式优缺点:
1 从结构可以看出 , 与Client相关联的是AbstractProduct , AbstractFactory , 即通过抽象接口操纵实例。
2 若客户想变换产品显得尤为容易, 只要变换AbstractFactory 实现对象即可 , 这得益于AbstractProduct 抽象了某类产品 , 但AbstractProduct只可使用实现它子类的产品对象 。
3 若系统新增产品 , 则从产品的抽象创建AbstractFactory 到 产品的具体行为 AbstractProduct都需进行修改 . 在系统产品种类较多时 , 此种设计模式欠妥 .
- 抽象工厂设计模式
- 设计模式-----抽象工厂
- 抽象工厂设计模式
- 抽象工厂设计模式
- 抽象工厂设计模式
- 设计模式 抽象工厂
- 设计模式--抽象工厂
- 设计模式--抽象工厂
- 设计模式 抽象工厂
- 设计模式-抽象工厂
- 设计模式-> 抽象工厂
- 抽象工厂设计模式
- 设计模式--抽象工厂
- 【设计模式】抽象工厂
- 设计模式---抽象工厂
- 【设计模式-抽象工厂】
- 设计模式-抽象工厂
- 设计模式--抽象工厂
- 集群同步session
- 设计模式综合实例分析之数据库同步系统(二)
- XHTML+CSS布局的使用点滴
- GDI+编程基础2
- 同时支持ARC和非ARC代码
- 设计模式-> 抽象工厂
- shell中的大括号和小括号
- ACM练习 题目1029:魔咒词典 C++ map的使用
- DOS合并文件命令
- Windows不能用鼠标双击运行jar文件怎么办
- vi指令大全,留着备用
- enum与typedef enum的用法
- 异常的概念和Java异常体系结构
- 【黑马程序员】面向对象(四) 第八天