AbstractFactory 和FactoryMethod

先说FactoryMethod

 

意图  定义一个用于创建对象的接口,让子类决定实例化哪一个类。将实例化推迟到子类。

 

这是工厂模式的类图,FactoryMethod在抽象父类中定义 在子类中实现 ,子类负责创建某产品的特定对象 ,经常的应用是在框架定义上,FactoryMethod 可以把不同集合与他的迭代器绑定起来。 

package FactoryMethod;

public abstract class Factory {

 abstract Product FactoryMethod();
 public Product getInstance(){
  return FactoryMethod();
 }
 public static void main(String [] args){
  Factory factory =new ConcreteCreater();
  System.out.print(factory.getInstance());
 }
}

package FactoryMethod;

public class ConcreteCreater extends Factory{

 @Override
 Product FactoryMethod() {
  Product product=new ConcreteProduct();
  
  return product;
 }

}

package FactoryMethod;

public class ConcreteProduct extends Product{
 public ConcreteProduct(){
  print();
 }

 @Override
 void print() {
  System.out.println("ConcreteProduct was producted");
  
 }

}

package FactoryMethod;

public abstract class Product {
 abstract void print();

}

如果需要有其他类型产品 那么只需在应用逻辑中加入SWITCH 或者读配置以产生正确的类型。

 

 

 

AbstractFactory

 

意图: 为客户特定的客户提供对象组。

问题 :需要实例化一组相关对象

解决方案:协调对象组的创建。提供一种方式,将如何知性对象实例化的规则从使用这些对象的客户对象提取出来

效果:这个模式将“使用哪些对象”的规则与“如何创建使用这些对象”的逻辑分离开

实现 :定义一个抽象类来指定创建哪些对象。然后为每个组实现一个具体类。可以用表或文件完成同样的任务。

 

类图如下

这个模式被称为AbstractFactory 是因为 它创建的物品本身是抽象的,也就是例子中的productA productB。

在最经常的实现中 AbctractFactory对英语factorymethod的抽象层  ConcreteFactory 对应与实现层,AbctractFactory中的每个创建函数都对应于一个工厂方法。

Client值负责使用工厂的产品而不负责创建 ,AbstractFactory 则负责创建对象。 实现了创建与应用逻辑的分离

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值