抽象工厂模式(笔记)

来源:互联网 发布:微信淘宝优惠群怎么做 编辑:程序博客网 时间:2024/05/21 02:36

定义:

抽象工厂模式是所有形态的工厂模式最为抽象和最为一般性的模式。抽象工厂模式可以向客户端提供一个接口,使得客户端不必在指定产品的具体类型的前提下,能够创建多个产品族的产品对象。

抽象工厂中方法对于产品结构,具体工厂对应于产品族

主要角色及UML


抽象产品:AbstractProduct

 都有可能具体不同的实现

 

具体产品:ConcreteProduct 具体产品

 对应于抽象产品的具体实现

 

抽象接口工厂:AbstractFactory

  包含所有创建产品的抽象方法

 

具体接口工厂:ConcreteFactory 创建特定实现的产品对象


源代码:

// 抽象产品A角色package com.pattern.abstractfactory;public interface AbstractProductA{   public void say();}

// 抽象产品B角色package com.pattern.abstractfactory;public interface AbstractProductB{   public void say();}
// 具体产品A1角色package com.pattern.abstractfactory;public class ConcreateProductA1 implements AbstactProdctA{ public void say(){   System.out.println("具体产品A1");   }}

// 具体产品A2角色package com.pattern.abstractfactory;public class ConcreateProductA2 implements AbstactProdctA{ public void say(){   System.out.println("具体产品A2");   }}
// 具体产品B1角色package com.pattern.abstractfactory;public class ConcreateProductB1 implements AbstactProdctA{ public void say(){   System.out.println("具体产品B1");   }}

// 具体产品B2角色package com.pattern.abstractfactory;public class ConcreateProductB2 implements AbstactProdctA{ public void say(){   System.out.println("具体产品B2");   }}

// 抽象工厂角色package com.pattern.abstractfactory;public interface AbstarctFactory{  public AbstractProductA createProductA();  public AbstractProductB createProductB();}


// 具体工厂角色Apackage com.pattern.abstractfactory;public class ConcreateFactoryA implements AbstarctFactory{   pulic AbstractProductA createProductA(){  return new ConcreateProductA1(); }public AbstactProductB createProductB(){  return new ConcreateProductB1();}}

// 具体工厂角色Bpackage com.pattern.abstractfactory;public class ConcreateFactoryB implements AbstarctFactory{   pulic AbstractProductA createProductA(){  return new ConcreateProductA2(); }public AbstactProductB createProductB(){  return new ConcreateProductB2();}}

客户端测试类:

// 测试类 package com.pattern.abstractfactory;public static void main(String []args){   AbstactFactory fa = new ConcreateFactoryA(); AbstractProductA pa = fa.createProductA(); AbstractProductB pb = fa.createProductB();   AbstactFactory fb = new ConcreateFactoryB(); AbstractProductA pa1 = fb.createProductA(); AbstractProductB pb1 = fb.createProductB();pa.say();pb.say();pa1.say();pb1.say();}


结果:

具体产品A1

具体产品B1

具体产品A2

具体产品B2




 抽象工厂模式的优缺点分析: 
       优点:客户端不再负责对象的具体创建,而是把这个责任交给了具体的工厂类,客户端只负责对对象的调用。当具有产品家族性质的产品被涉及到一个工厂类中后,对客户端而言是非常友好的,更重要的是如果想要更换为另外一产品家族,所要做的只是需要增加相应的产品家族成员和增加一个具体的产品工厂而已。
      缺点:当有新的产品加入的时候,也就是当产品的结构发生改变时,修要修改抽象工厂类的设计,这就导致了必须修改所有的具体工厂类,导致很客观的工作量的增加。




0 0
原创粉丝点击