码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-04-01 22:59:18      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:方法   客户端   功能   oid   子类   开放   延迟   plone   interface   

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

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

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 }

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

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

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

工厂方法就先到这吧。

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

标签:方法   客户端   功能   oid   子类   开放   延迟   plone   interface   

原文地址:https://www.cnblogs.com/zfding/p/8688626.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!