设计模式 工厂-Factory
在开始笔记之前先推荐一个网站:http://design-patterns.readthedocs.org/zh_CN/latest/index.html
网站对每一个Pattern都有详尽的解说。并且都有UML图帮助理解记忆。
工厂模式(Factory)
属于创建型模式,解决创建对象代码重复的问题。同时使抽象对象不依赖于具体对象。
按照不同的层次有3种实现方法:简单工厂,工厂方法,抽象工厂
简单工厂 Simple Factory
严格来说简单工厂算不上是一种设计模式。其更像一种编程习惯。即将重复的代码进行封装重用。
Head First例子
在PizzaStore类中有OrderPizza方法。方法中根据不同的要求创建Pizza,然后切块,包装。引入简单工厂,将原来在OrderPizza中的具体创建Pizza的new代码(一长串的if else if),移到PizzaFactory中。达到重用,依赖倒置的效果。
依赖倒置;依赖抽象不依赖具体
dependency inversion; depend on abstractions not concrete classes
Origianl Bad Design: PizzaStore ---> various Pizza
New Good Design: PizzaStore ---> Pizza <--- variouse Pizza

工厂方法 Factory Method
创建者包含一个工厂方法。在具体的使用者中实现工厂方法create()创建具体的产品。在这里有两个平行的类族。使用者类族和产品类族。特征是抽象创建者中包含一个抽象的工厂方法。但具体实现留给子类。
Head First例子
不同的地区有PizzaStore加盟店。OrderPizza的逻辑不变。不同的地域风味PizzaStore继承PizzaStore。在各自的creatPizza方法中创建地域风味Pizza。

抽象工厂 Abstract Factory
产品包含一系列原料。创建一个工厂的类族,包含创建一系列具体原料的方法。具体产品的prepare()方法中,使用抽象工厂初始化自己的原料。如工厂方法中,使用者也是一个类族。具体使用者的工厂方法create()中创建具体的工厂,然后将具体工厂传给具体产品进行构造。
Head First例子
不同的Pizza(芝士,蔬菜)包含不同的原料。相同类型的Pizza,在不同的地域,要使用该地域的原料。在准备原料时,具体Pizza需要一个抽象原料工厂,去创建原料。
每一种原料都是一个类族。抽象原料和具体不同地域风味原料。
工厂类族,具体的工厂创建不同的地域风味原料。
在加盟的地域PizzaStore中,实现create()方法。创建原料工厂。参数指示创建何种具体Pizza。将工厂传给具体Pizza,创建具体Pizza。返回抽象的Pizza。
下图的Client是ConcretePizza
![]()
设计模式 工厂-Factory的更多相关文章
- 一天一个设计模式——Abstract Factory抽象工厂模式
一.模式说明 前面学习了工厂方法(Factory Method)模式.在工厂方法模式中,在工厂方法模式中,父类决定如何生成实例,但并不决定所要生成的具体类,具体的处理交由子类来处理.这里学习的抽象工厂 ...
- php设计模式 工厂、单例、注册树模式
Source Code Pro字体 easyphp 命名空间:隔离类和函数,php5.3以后 //test5.php<?php namespace Test5;//命名空间必须是程序脚本的第一 ...
- .NET设计模式: 工厂模式
.NET设计模式: 工厂模式(转) 转自:http://www.cnblogs.com/bit-sand/archive/2008/01/25/1053207.html .NET设计模式(1): ...
- C++设计模式——工厂方法模式
本文版权归果冻说所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.» 本文链接:http://www.jellythink.com/arch ...
- 【设计模式】Java设计模式 -工厂模式
[设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...
- 4. 星际争霸之php设计模式--工厂方法模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 深入浅出设计模式——工厂方法模式(Factory Method)
介绍在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计模式的创建型设计模式.它解决的仍然是软件设计中与创建对象有关的问题.它可以更好的处理客户的需求变化. 引入我 ...
- 聊聊JS与设计模式之(工厂Factory)篇------(麦当劳的故事)
一,总体概要 1,笔者浅谈 说起设计模式其实并不是什么很新奇的概念,它也不是基于特定语言所形成的产物,它是基于软件设计原则以及相关的方法论和经过特定时期衍生出的若干解决方案.本文会以一个实例带入大家学 ...
- 设计模式——工厂模式(Factory)
要想正确理解设计模式,首先必须明白它是为了解决什么问题而提出来的. 设计模式学习笔记 --Shulin 转载请注明出处:http://blog.csdn.net/zhshulin 1.概念 工厂模式定 ...
随机推荐
- SSO之CAS单点登录详细搭建教程
本教程是我个人编写,花费几个小时的时间,给需要学习的人员学习使用,希望能帮助到你们. [环境说明]:本文演示过程在同一个机器上的(也可以在三台实体机器或者三个的虚拟机上),环境如下: windows7 ...
- Android里的多线程知识点
1.Thread类与Runnable接口 子类继承Thread类实现跑自己逻辑的run方法,在调用Thread类的start方法后,会自动调用run方法,该对象只可以调用一次start方法,即Thre ...
- hdoj - 1258 Sum It Up && hdoj - 1016 Prime Ring Problem (简单dfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1258 关键点就是一次递归里面一样的数字只能选一次. #include <cstdio> #inclu ...
- linux 查看程序是否运行
命令格式:ps -ax|grep program_name 如查看包含python的程序是否运行: ps -ax|grep python ? Sl : python ToServer.py pts/ ...
- ibernate学习笔记5---实体类或属性名与数据库关键字冲突、hql命名参数、hql实现通用分页
一.实体类或属性名与数据库关键字冲突问题1.实体类名与数据库中的关键字冲突比如:实体表User与oracle中的系统表冲突解决方式1:在xml中添加table属性,指定表名,使其不与name默认相等 ...
- Codeforces Round #215 (Div. 1) B
出来冒个泡 由于数比较大 开了map计数 然后边走边删边加 勉强可过 #include <iostream> #include<cstdio> #include<cs ...
- website project team member 角色及开发过程概念图
一个web项目的团队往往具有以下角色的人员组成: project stakeholder(client or business owner)产品经理 Project manager 项目经理 prod ...
- 基于Bootstrap的超酷jQuery开关按钮插件
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJgAAAA2CAIAAAC0tsfoAAAB/0lEQVR4nO3bQWrCQBTGcc/mbVz0DD
- IOS中UISearchBar的使用
1.搜索框的代理(delegate)方法 #pragma mark 监听搜索框的文字改变 - (void)searchBar:(UISearchBar *)searchBar textDidChang ...
- cocoStudio UI编辑器 学习总结
一.控件 控件基类 UIWidget:所有UI控件的基类 addChild:添加UIWidget类型的节点 addRenderer:添加CCNode类型的节点 所有UIWidget,都可以设置成触摸s ...