大话设计模式之工厂方法模式读后感

引言:让我们重温经典,致敬经典

工厂方法模式:定义一个用于创建对象的接口,让子类来决定实例化哪一个类,工厂方法使一个类的实例化延迟到了子类。

UML图:

 1 package com.dzf.designtest;
 2 
 3 /**
 4  * <desc>
 5  *     工厂方法:定义一个创建对象的接口,让子类来决定实例化哪一个类,工厂方法使一个类的实例延迟到子类。
 6  * </desc>
 7  * @author dingzf
 8  * @date 2018/4/1
 9  * @time 21:42
10  */
11 public class FactoryMethodDmeo {
12     //客户端
13     public static void main(String[] args) {
14         ProductFactory productFactory = new ProductImplOneFactory();
15         Product product = productFactory.getInstance();
16         product.operation();
17     }
18 }
19 
20 abstract class Product {
21     public abstract void operation();
22 }
23 
24 class ProductImplOne extends Product {
25     @Override
26     public void operation() {
27         System.out.println("我是产品1号");
28     }
29 }
30 
31 class ProductImplTwo extends Product {
32     @Override
33     public void operation() {
34         System.out.println("我是产品2号");
35     }
36 }
37 
38 interface ProductFactory {
39     //定义创建对象的接口,再子类中去实例化目标对像
40     public Product getInstance();
41 }
42 class ProductImplOneFactory implements ProductFactory {
43     //子类实例化目标对象
44     @Override
45     public Product getInstance() {
46         return new ProductImplOne();
47      }
48 }
49 class ProductImplTwoFactory implements ProductFactory{
50     //子类实例化目标对象
51     @Override
52     public Product getInstance() {
53         return new ProductImplTwo();
54     }
55 }

解读:我们知道简单工厂模式和工厂方法模式很像,但是又不同。

简单工厂最大的优点在于工厂类中包含了必要性的逻辑判断,根据客户端的选择动态的实例化对象,对于客户端来说,去除了和具体产品的依赖。但是我们增加功能的时候,是要改变工厂类中的逻辑判断的。这就违背了开放封闭原则。于是工厂方法就来了。记得在开放封闭原则那篇里说过,在刚开始的时候,我们不知道什么是会变的,很难预测,当类中的某些行为发生变化的时候,我们可以把这些抽象出来,防止以后发生同样的变化。工厂方法模式就是对这句话的诠释!

工厂方法模式是简单工厂的进一步抽象,由于使用多态,保持了原有简单工厂的优点,而且客服了它的缺点,但是每增加一个产品,就需要增加一个与之相对应的工厂类,额外的增加了开发的工作量。有没有更两全齐美的办法呢,答案肯定是有的。不在本篇范围了,后面再说吧!

工厂方法就先到这吧。

posted @ 2018-04-01 22:07  恋在那时  阅读(173)  评论(0编辑  收藏  举报