工厂方法模式--GOF的23个之一
来源:互联网 发布:2016年淘宝没有销量 编辑:程序博客网 时间:2024/05/06 10:43
工厂方法模式--GOF的23个之一
前言:来自《Head First 设计模式》,不涉及任何商务往来,仅为学习使用,作为参照笔记。定义了一个创建对象的接口,但由子类决定要实例化类是哪一个。工厂方法类把实例化推迟到子类。
工厂方法模式类图
原本是由一个对象负责所有具体类的实例化,改为一群子类来负责实例化。
优点:工厂方法模式帮助我们将产品的“实现”从“使用”中解耦。
缺点:利用字符串传入参数化的类型,很危险。
下面给出一张实例类图,来做一些分析:
一、 有个做法可以让客户产品(比萨)制作活动局限于工厂客户类(PizzaStore),而同时又能让这些加盟工厂客户类(加盟店)依然可以自由地制作该区域的风味。
二、 工厂客户类方法(orderPizza())对客户产品(Pizza对象)做了许多事情(加工、修改),但由于客户产品(Pizza对象)是抽象的,工厂客户类(orderPizza())并不知道哪些实际的具体类参与进来了。换句话说,这就是解耦(decouple)。
三、 当工厂客户类方法(orderPizza())调用工厂客户类方法(creatPizza())时,某个比萨店子类将负责创建比萨。
做哪一种产品(比萨)呢?当然是由具体的客户类(比萨店)来决定。
四、 工厂经常只产生一种对象,不需要参数化。学习中采用的方式称为“参数化工厂方法”。它可以根据传入的参数创建不同的对象。模式的这两种形式都是有效的。
五、 简单工厂模式与工厂方法模式的区别。
简单工厂把全部的事情,在一个地方都处理完了,然而工厂方法却是创建一个框架,让子类决定要如何实现。比方说,在工厂方法中,orderPizza()方法提供了一般的框架,以便创建比萨,orderPizza()方法依赖工厂方法创建的具体类,并制造出实际的比萨。可通过继承PizzaStore类,可以将对象的创建封装起来,但是简单工厂不具备工厂方法的弹性,因为简单工厂不能变更正在创建的产品。
让子类做决定。
理解:普通人申请成为客户(继承PizzaStore),需要产品时,客户自己向工厂要。
继承PizzaStore,实现creatPizza()。--工厂-方法。
如有好的建议,可留言或发至笔者邮箱:fzb_xxzy@163.com
- 工厂方法模式--GOF的23个之一
- 抽象工厂模式--GOF的23个之一
- 策略模式--GOF的23个之一
- 简单工厂模式--不是GOF的23个的模式
- 观察者模式—GOF的23个之一
- 装饰者模式—GOF的23个之一
- 单例模式--GOF的23个之一
- GoF 23个经典的设计模式03--创建模式之工厂方法(未完代续)
- GOF 23个基本的设计模式
- GOF 23个基本的设计模式
- GoF的23个经典设计模式
- GoF 的23个经典设计模式
- GoF 23个经典的设计模式01--创建模式之抽象工厂(未完代续)
- GOF 23种设计模式 创建类模式 (2) 工厂方法模式
- 《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:基于工厂方法的迷宫
- 《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:基于工厂方法的迷宫
- 《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:基于工厂方法的迷宫
- MM与GOF的23个设计模式
- 黑马程序员笔记:Java基础知识之static关键字
- LSA和 PLSA学习笔记
- node.js应用程序的测试。
- Java中的构造方法(详解)
- C++学习[6]--C++自己写的头文件和实现文件,如何让包含main函数的cpp文件调用他们?
- 工厂方法模式--GOF的23个之一
- cocos2d-x 异常:无法打开文件“libcocos2d.lib
- test_state_copy()
- 直方图的反向投影
- Delphi.edit框只允许输入数字&字母
- C++问题集锦
- POJ 3352&&3177 双连通缩点求缩点树叶子节点数
- 技术名词备忘录
- sublime text2装ctags插件