您的位置:首页 > 其它

抽象工厂模式(笔记)

2014-02-08 17:33 260 查看
定义:

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

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

主要角色及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();
}


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

// 具体工厂角色B
package 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

 抽象工厂模式的优缺点分析: 

       优点:客户端不再负责对象的具体创建,而是把这个责任交给了具体的工厂类,客户端只负责对对象的调用。当具有产品家族性质的产品被涉及到一个工厂类中后,对客户端而言是非常友好的,更重要的是如果想要更换为另外一产品家族,所要做的只是需要增加相应的产品家族成员和增加一个具体的产品工厂而已。

      缺点:当有新的产品加入的时候,也就是当产品的结构发生改变时,修要修改抽象工厂类的设计,这就导致了必须修改所有的具体工厂类,导致很客观的工作量的增加。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: