设计模式学习—工厂方法模式

  1. 动机:解决简单工厂中增加新产品需要修改工厂逻辑
  2. 角色:
    1. 抽象工厂(一个)
    2. 具体工厂
    3. 抽象产品(一)
    4. 具体产品
  3. 结构:
       
   4.优缺点:
    1. 优点:
      1. 用户只需要关心所需产品对应的工厂,无需关心创建细节,甚至无需知道具体产品类的类名
      2. 工厂可以自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部
      3. 在系统中加入新产品时,无需修改抽象工厂和抽象产品提供的接口,无需修改客户端,也无需修改其他的具体工厂和具体产品,而只要添加一个具体工厂和具体产品就可以了,符合“开闭原则”
    2. 缺点:  
      1. 需要编写新的具体产品类,而且还要提供与之对应的具体工厂类,系统中类的个数将成对增加,在一定程度上增加了系统的复杂度(编译运行)
      2. 由于考虑到系统的可扩展性。在实现时可能需要用到DOM、反射等技术,增加了系统的实现难度。
     5.用例:集合实现的Iterator接口、JMS、JDBC、电视机工厂、日志记录器(分类记录日志)、


代码:
/**
 * 抽象产品
 *  @author  ilmlife
 *  <pre> 2013  - 12 -  3下午10:34:07 </pre>
 */
public  abstract  class  ImageReader {
        public  abstract  void  reader();
}

/**
 * 抽象工厂
 *  @author  ilmlife(ilmlife @163.com)
 *  <pre> 2013  - 12 -  3下午10:37:04 </pre>
 */
public  abstract  class  ImageReaderFactory {
        public  abstract  ImageReader createReaderImage();
}

/**
 * 具体产品
 *  @author  ilmlife
 *  <pre> 2013  - 12 -  3下午10:37:33 </pre>
 */
public  class  GifReader  extends  ImageReader {
        @Override
        public  void  reader() {
            System.  out .println( "gif image reader...."  );
      }
}

/**
 * 具体产品
 *  @author  ilmlife
 *  <pre> 2013  - 12 -  3下午10:38:09 </pre>
 */
public  class  JpgReader  extends  ImageReader {
        @Override
        public  void  reader() {
            System.  out .println( "jpg image reader...."  );
      }
}
     
/**
 * 具体工厂
 *  @author  ilmlife
 *  <pre> 2013  - 12 -  3下午10:37:55 </pre>
 */
public  class  GifReaderFactory  extends  ImageReaderFactory {
        @Override
        public  ImageReader createReaderImage() {
              return  new  GifReader();
      }

}

/**
 * 具体工厂
 *  @author  ilmlife
 *  <pre> 2013  - 12 -  3下午10:38:20 </pre>
 */
public  class  JpgReaderFactory  extends  ImageReaderFactory {
        @Override
        public  ImageReader createReaderImage() {
              return  new  JpgReader();
      }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值