《Java与模式》学习笔记之二---工厂方法模式(Factory Method)

问题:

        在学习笔记一中曾提到简单工厂模式的缺点是对"开-闭"原则支持不够, 当系统中有新产品加入时, 必须修改工厂类, 添加必要的逻辑在工厂类中.

        为了克服简单工厂模式的缺点, 引入了工厂方法模式. 即增加一个抽象工厂接口, 仅负责给出具体工厂类必须实现的接口,  不负责哪个抽象类被实例化的细节.

       工厂方法模式可以使系统在不修改具体工厂类的情况下添加新产品.

类图:

实现源码:

/**
 * 抽象工厂接口
 * 负责给出具体工厂类必须实现的接口
 */
public interface Factory
{
 public Product factory();
}

/**
 * 具体工厂类
 * 负责创建具体产品类ConcreteProduct1.
 */
public class ConcreteFactory1 implements Factory
{
 public Product factory()
 {
  return new ConcreteProduct1();
 }
}

/**
 * 具体工厂类
 * 负责创建具体产品类ConcreteProduct2.
 */
public class ConcreteFactory2 implements Factory
{
 public Product factory()
 {
  return new ConcreteProduct2();
 }
}

/**
 * 抽象产品接口
 */
public interface Product
{
}

/**
 * 具体产品类ConcreteProduct1
 */
public class ConcreteProduct1 implements Product
{
 public ConcreteProduct1()
 {
  //do something
 }
}

/**
 * 具体产品类ConcreteProduct2.
 */
public class ConcreteProduct2 implements Product
{
 public ConcreteProduct2()
 {
  //do something
 }
}

/**
 * 客户端代码.
 */
  Factory theConcreteFactory1 = new ConcreteFactory1();
  Factory theConcreteFactory2 = new ConcreteFactory2();
  Product aConcreteProduct1 = theConcreteFactory1.factory();
  Product aConcreteProduct2 = theConcreteFactory2.factory();

注意:

1) 在给类和方法取名时应让人明显看出系统应用了工厂方法模式

2)抽象工厂类可以定义多个工厂方法, 这些方法可以提供不同逻辑, 满足提供不同产品对象的目的.

总结:

        对工厂方法模式来说, 添加一个新产品只需向系统中加入一个新产品类以及对应的工厂类即可. 没有必要修改客户端, 也没有必要修改抽象工厂类和系统已有的具体工厂类. 对增加新产品来说, 系统完全支持"开-闭"原则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值