HeadFirst设计模式篇四:工厂模式
2019独角兽企业重金招聘Python工程师标准>>>
先说明:由于HeadFirst属于国外翻译过来,文中的例子过于难理解,这里根据设计模式之禅进行总结
问题引入:
女娲造人故事:
女娲利用八卦炉造了3种不同肤色的人,这里女娲作为cilent,八卦炉作为工厂,人类作为产品
设计类图:
Human、BlackHuman、YelloHuman、WhiteHuman:
public interface Human {void getColor();void talk();
}3个具体子类代码略。。
AbstractHumanFactory
public abstract class AbstractHumanFactory {public abstract <T extends Human> T createHuman(Class<T> clazz);
}
HumanFactory
public class HumanFactory extends AbstractHumanFactory {@Overridepublic <T extends Human> T createHuman(Class<T> clazz) {Human human = null;try {human = clazz.newInstance();} catch (Exception e) {e.printStackTrace();}return (T)human;}
}
NvWa
public class NvWa {public static void main(String[] args) {AbstractHumanFactory factory = new HumanFactory();Human human = factory.createHuman(WhiteHuman.class);human.talk();}
}
工厂方法模式的扩展
1、缩小为简单工厂模式
去掉AbstractHumanFactory类,同时将HumanFactory的方法修改为静态方法。
2、升级为多个工厂
3、替代单例模式
public class Singleton {private Singleton(){}
}public class SingletonFactory {private static Singleton singleton;static {Class clazz = singleton.getClass();try {Constructor<Singleton> constructor = clazz.getDeclaredConstructor();constructor.setAccessible(true);singleton = constructor.newInstance();} catch (Exception e) {e.printStackTrace();}}public static Singleton getSingleton(){return singleton;}
}
说明:关于这里讲的工厂模式和Head First一书中将的有差别,HeadFirst一书中将的工厂模式是将创建实例延迟到子类去做,这里设计模式之禅这本书讲的知识简单模式?!
抽象工厂模式:
问题引入:
人应该还有性别。。于是将八卦炉分成了两个,一个制造男性,一个制造女性。
抽象工厂模式的特点:
优点:它不关心对象是如何创建出来的,只需要知道工厂类是谁,创建出一个需要的对象。
缺点:对于产品族的扩展会变得非常困难,不像工厂模式,所有的工厂类都要修改。
转载于:https://my.oschina.net/silence88/blog/988831
HeadFirst设计模式篇四:工厂模式相关推荐
- 调侃《HeadFirst设计模式》之工厂模式(一)
当你有一群相关的具体类时,通常会写出如下代码: 一旦有变化或扩展,就要打开代码进行检查,这样使得系统更难维护更新,也容易犯错. 记得我们的第一个设计原则:找出可能变化的部分,将它们从不变的地方提取出来 ...
- 虚无空间java下载_Java进阶篇设计模式之二 ----- 工厂模式
前言 在上一篇中我们学习了单例模式,介绍了单例模式创建的几种方法以及最优的方法.本篇则介绍设计模式中的工厂模式,主要分为简单工厂模式.工厂方法和抽象工厂模式. 简单工厂模式 简单工厂模式是属于创建型模 ...
- 设计模式三—抽象工厂模式
设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是 ...
- php的类图怎么生成_PHP设计模式之简单工厂模式
PHP设计模式之简单工厂模式 先从简单工厂入门,不管是面试还是被他人面试,在问到设计模式的时候,大多数人都会提到工厂模式.毫无疑问,工厂相关的几种模式在设计模式中是最出名的也是应用比较广泛的一种模式. ...
- 设计模式之四(抽象工厂模式第三回合)
原文:设计模式之四(抽象工厂模式第三回合) 前言 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式最大的好处便是易于交换产品系列,由于具体工厂类,例如I ...
- python抽象工厂模式_Python设计模式之抽象工厂模式
Python设计模式之抽象工厂模式 这篇文章主要为大家详细介绍了Python设计模式之抽象工厂模式,感兴趣的小伙伴们可以参考一下 python面向对象编程入门,我们需要不断学习进步 "&qu ...
- C#设计模式(2)——简单工厂模式
一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式--简单工厂模式. 二.简单工厂 ...
- 设计模式之简单工厂模式(C#版)
设计模式之简单工厂模式(C#版) 简介 假设有个女朋友 总结 简介 我用最简洁而直接的方式来描述一下,什么是简单工厂模式.一句话就是,工厂类使用switch case语句返回特定类型. 下面,我们用一 ...
- 软件设计模式之路-----工厂模式抽象工厂模式
系统开发和现实生活是一样的.在现实生活中一个复杂的商品都是通过一个工厂产生,具体工厂怎么产生的我们不需在乎.在软件设计上也可如此,如果一个对象的创建过程比较复杂,便可考虑使用工厂模式. 简单工厂模式 ...
最新文章
- 【JavaScript总结】JavaScript发展与学习内容
- 搜索引擎爬虫蜘蛛的USERAGENT大全
- golag mysql_golang连接mysql操作示例增删改查
- Utility Manager 的一些百度不了的操作
- 微信小程序:生命周期
- Python自动化测试-正则表达式解析
- jQuery Word Export: missing dependency (FileSaver.js)
- 常见的视频学习网站:(个人整理)
- 教你如何选期权比例:记住年终奖扣税的临界点,用期权控制税前金额,实现利益最大化!...
- 7-2 哥尼斯堡的“七桥问题” (25分)
- CodeLite配置
- spark日志中 Tid是什么
- 电子学会2020年9月青少年软件编程(图形化)等级考试试卷(一级)答案解析
- 主数据治理项目实施中存在的问题
- 全面剖析《自己动手写操作系统》第四章---加载Loader.bin
- Eclipse中设置jsp文件 字体大小
- 各大android应用商店的展示权重 安卓应用商店关键词+下载量+评价+其他这几项占的权重(仅供参考)
- 小程序未来发展趋势怎样?2020最新趋势分析
- PCM data flow - part 4: ASoC platform driver
- Flutter使用插件flutter_staggered_grid_view实现分页瀑布流效果
热门文章
- fatal: Path ‘XXX‘ is in submodule ‘XXX‘错误(path is in submodule)
- JS 常用函数一(弹对话框、操作HTML元素、写HTML文档、写到控制台、查找元素、元素插入内容、改变HTML属性、计时)
- Windows平台下go编译器LiteIDE的安装和使用
- Python paho-mqtt消息队列
- 33. 脱壳篇-重建输入表
- 线性表之链式存储结构_单链表相关算法
- 访问修饰符,封装,继承
- matconvnet在ubuntu15.10下配置和使用方法
- C#中一些常用的方法使用
- git add 所有修改文件_Git管理修改、撤销和删除文件