惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
罗磊的独立博客
SecWiki News
SecWiki News
The Register - Security
The Register - Security
The GitHub Blog
The GitHub Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Schneier on Security
IT之家
IT之家
博客园 - 聂微东
T
The Exploit Database - CXSecurity.com
Recorded Future
Recorded Future
大猫的无限游戏
大猫的无限游戏
Know Your Adversary
Know Your Adversary
Latest news
Latest news
Vercel News
Vercel News
G
GRAHAM CLULEY
D
DataBreaches.Net
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
SegmentFault 最新的问题
博客园_首页
雷峰网
雷峰网
T
Tenable Blog
Spread Privacy
Spread Privacy
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
酷 壳 – CoolShell
酷 壳 – CoolShell
Cisco Talos Blog
Cisco Talos Blog
V
Visual Studio Blog
J
Java Code Geeks
博客园 - Franky
The Cloudflare Blog
Apple Machine Learning Research
Apple Machine Learning Research
C
CERT Recently Published Vulnerability Notes
T
Threatpost
Google DeepMind News
Google DeepMind News
F
Fortinet All Blogs
P
Privacy International News Feed
T
Threat Research - Cisco Blogs
T
The Blog of Author Tim Ferriss
V
Vulnerabilities – Threatpost
Recent Announcements
Recent Announcements
Blog — PlanetScale
Blog — PlanetScale
Security Latest
Security Latest
U
Unit 42
M
MIT News - Artificial intelligence
Y
Y Combinator Blog
K
Kaspersky official blog
有赞技术团队
有赞技术团队
B
Blog
腾讯CDC

博客园 - JackMa

设计模式 外观 Facade 设计模式 适配器-Adapter 设计模式 命令-Command 设计模式 单件-Singleton 积累PDU 设计模式 策略-Strategy,装饰-Decorator,观察者-Observer Java多线程编程 Red Hat Linux认证 认识Agile,Scrum和DevOps 博客目标 iOS Development Learning 13Nov 重新起步 iOS 开发 XML学习笔记(七)Schema语法杂项 XML学习笔记(六)Schema语法之复杂类型 UML和模式应用-第一部分:绪论 XML学习笔记(五)Schema语法之简单类型 XML学习笔记(四)Schema介绍篇 XML学习笔记(三)进阶篇 Xml学习笔记(二)Javascript篇
设计模式 工厂-Factory
JackMa · 2016-03-28 · via 博客园 - JackMa

在开始笔记之前先推荐一个网站: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