抽象工厂模式(笔记)

定义:

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

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

主要角色及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




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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值