在开始笔记之前先推荐一个网站: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的更多相关文章

  1. 一天一个设计模式——Abstract Factory抽象工厂模式

    一.模式说明 前面学习了工厂方法(Factory Method)模式.在工厂方法模式中,在工厂方法模式中,父类决定如何生成实例,但并不决定所要生成的具体类,具体的处理交由子类来处理.这里学习的抽象工厂 ...

  2. php设计模式 工厂、单例、注册树模式

    Source Code Pro字体  easyphp 命名空间:隔离类和函数,php5.3以后 //test5.php<?php namespace Test5;//命名空间必须是程序脚本的第一 ...

  3. .NET设计模式: 工厂模式

    .NET设计模式: 工厂模式(转) 转自:http://www.cnblogs.com/bit-sand/archive/2008/01/25/1053207.html   .NET设计模式(1): ...

  4. C++设计模式——工厂方法模式

    本文版权归果冻说所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.» 本文链接:http://www.jellythink.com/arch ...

  5. 【设计模式】Java设计模式 -工厂模式

    [设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...

  6. 4. 星际争霸之php设计模式--工厂方法模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  7. 深入浅出设计模式——工厂方法模式(Factory Method)

    介绍在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计模式的创建型设计模式.它解决的仍然是软件设计中与创建对象有关的问题.它可以更好的处理客户的需求变化. 引入我 ...

  8. 聊聊JS与设计模式之(工厂Factory)篇------(麦当劳的故事)

    一,总体概要 1,笔者浅谈 说起设计模式其实并不是什么很新奇的概念,它也不是基于特定语言所形成的产物,它是基于软件设计原则以及相关的方法论和经过特定时期衍生出的若干解决方案.本文会以一个实例带入大家学 ...

  9. 设计模式——工厂模式(Factory)

    要想正确理解设计模式,首先必须明白它是为了解决什么问题而提出来的. 设计模式学习笔记 --Shulin 转载请注明出处:http://blog.csdn.net/zhshulin 1.概念 工厂模式定 ...

随机推荐

  1. TEET

    [{"PROCESS_STORE_TIME":"3min 11s","PROCESS_GET_FILE_TIME":"3min&q ...

  2. Linux 添加环境变量和删除环境变量

    环境变量是一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息.例如PATH.在交叉编译中,会经常运用到环境变量的设置. 在linux中,查看当前全部的环境变量的命令式env. 当然也 ...

  3. 笔记一、Git服务器【转】

    传输协议: 本地传输,SSH协议,Git协议,HTTP协议   git clone /home/git/project.git                      // 本地clone git ...

  4. Asp.net Json 解析 与 直接用ip访问返回josn

    数据分析 目前手头上需要制作一个天气预报功能,现成的接口已经有了.我随便输入一个城市,然后出现了如下的信息: {"wdata":{"cityName":&quo ...

  5. HttpClient 4.x 执行网站登录并抓取网页的代码

    HttpClient 4.x 的 API 变化还是很大,这段代码可用来执行登录过程,并抓取网页. HttpClient API 文档(4.0.x), HttpCore API 文档(4.1) pack ...

  6. Python得到前面12个月的数据,Python得到现在时间 前一年的数据,

    #Python 实现得到现在时间12个月前的每个月 # 假设现在的时间是2016年9月25日 #得到现在的时间 得到now等于2016年9月25日 now = datetime.datetime.no ...

  7. YTU 2621: B 继承 圆到圆柱体

    2621: B 继承 圆到圆柱体 时间限制: 1 Sec  内存限制: 128 MB 提交: 313  解决: 240 题目描述 定义了Circle圆形类,在此基础上派生出Cylinder圆柱体类. ...

  8. 如何将SQLite数据库(dictionary.db文件)与apk文件一起发布

      可以将dictionary.db文件复制到Eclipse Android工程中的res\raw目录中,如图1所示.所有在res\raw目录中的文件不会被压缩,这样可以直接提取该目录中的文件.使 用 ...

  9. CSS之可折叠导航

    简述 下面我们来讲述如何仅仅用CSS来实现一个可折叠的导航. 简述 nav标签 summary标签 效果 源码 解释 为小三角添加CSS样式 <nav>标签 定义和用法 <nav&g ...

  10. java读取Properties文件

    方法一.通过java.util.Properties读取 Properties p=new Properties(); //p需要InputStream对象进行读取文件,而获取InputStream有 ...