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

来源:互联网 发布:男主女主网络大神 编辑:程序博客网 时间:2024/05/21 15:39
  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