由歌词引发的模式思考之上篇(FactoryMethod模式)
“老张开车去东北 撞了 肇事司机耍流氓 跑了 多亏一个东北人 送到医院缝五针 好了 ……翠花,上酸菜”
“老张开车去东北”,OK,这里如果我们刻意的用OO思想来看的话,老张这次是开车去的,下次就有很可能开飞机去的……这里请允许我刻意的这样的思考这个问题,因为刻意的这样思考,我们可以从这句话发现两个蕴含的设计模式,一个是FactoryMethod,一个是AbstractFactory。
一、FactoryMethod
FactoryMethod模式
OK,回到这句歌词,正如上面所说的,这次开车,下次开飞机……所以我们要思考出一种不管是车还是飞机或者火车,我们的程序都能灵活的适应需求的变化,这里就会用到FactoryMethod模式。
1 public interface Moveable { 2 void run(); 3 }
1 public class Car implements Moveable { 2 3 @Override 4 public void run() { 5 System.out.println("car run"); 6 } 7 8 }
1 public class Plane implements Moveable { 2 3 @Override 4 public void run() { 5 System.out.println("plane fly"); 6 } 7 8 }
1 public abstract class VicheleFactory { 2 abstract Moveable create(); 3 }
1 public class CarFactory extends VicheleFactory { 2 3 @Override 4 public Moveable create() { 5 return new Car(); 6 } 7 8 }
1 public class PlaneFactory extends VicheleFactory { 2 3 @Override 4 public Moveable create() { 5 return new Plane(); 6 } 7 8 }
1 public class Test { 2 public static void main(String[] args) { 3 // VicheleFactory factory = new CarFactory(); 4 VicheleFactory factory = new PlaneFactory(); 5 Moveable m = factory.create(); 6 m.run(); 7 } 8 }
所有的工厂以及产品都有自己的父类,这个父类规定好自己的子类的方法特性,可以任意的扩展,这样测试类调用的时候只需要做小小的改动就可以响应需求的变化。
FactoryMethod类结构
由图可知,工厂和产品的父类处于相互平行的层次,而具体实现工厂和具体实现产品又是一种平行的层次,同时还存在一种生产关系。
关注中篇。
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
由歌词引发的模式思考之上篇(FactoryMethod模式)相关推荐
- 游戏破解引发盈利模式思考
最近公司两款游戏在国内大型论坛发现破解版,让我们一直感觉遥远的"版权"问题瞬间来到身边,使我们措手不及,我们还是按照正常流程跟论坛发邮件删除该贴,支持国内原创游戏.2天时间内发现2 ...
- 幽灵代码删库跑路引发的分支模式思考
Photo @ Akshar Dave 文 | 故知 背景--讲个真实的"鬼"故事 菜鸟 CTO 线研发效能团队开发了一个大促协同平台,来提高大家在处理大促相关工作时的协同效 ...
- 增长的旋律——AARRR模式思考(二)
作者:livan 来源:数据python战算法 前情介绍 上一篇文章:增长的旋律--AARRR模式思考(一),介绍了AARRR模型中的"Acquisition获取用户&q ...
- GitChat 被恶意攻击引发的技术性思考:拒绝服务攻击
本文来自作者 肖志华 在 GitChat 上分享 「GitChat 被恶意攻击引发的技术性思考:拒绝服务攻击」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 拒绝服务的类型很多,挑几个有特 ...
- 常见软件项目开发模式思考
一.软件项目 在2000左右 程序员还是一种比较罕见的工作,那是的个人台式机还是当时富裕家庭的高级娱乐用品,一开始网络程序员部分前后端,PHP.JSP.ASP这些技术形成了最早的网络程序.BS 系统 ...
- NSObject到底多么大引发的一些思考
NSObject到底多么大引发的一些思考 本文引用及参考文献,感谢一下博主的分享: C++ 内存对齐-by enos 小码哥iOS学习笔记第一天: Objective-C的本质-by 冰凌天 Obje ...
- 关于“找老婆”问题引发的深入思考
浅谈"数学家.理论计算机科学家.工程师的区别" 关于"找老婆"问题引发的深入思考 有一天,三个朋友一起去吃烧烤.他们分别是数学家,理论计算机科学家,计算机工程师 ...
- 可调时钟的闹钟模式(接上篇)
写在前面: 上篇文末提到可以优化的地方包括加入闹钟,了解无源蜂鸣器的工作原理后,就着手扩展闹钟设置功能了,同时按键按下加入蜂鸣器的提示音.由于上篇的篇幅过长了,所以决定单独写一篇这个闹钟模块. 一.实 ...
- 电子商务商业模式思考
一.B2B电子商务网站: 阿里巴巴,环球资源内贸网,中国制造网,慧聪网,金银岛,网盛 1.阿里巴巴 特点:具有完善的功能和简单易懂的操作.坚持做任何生意的人都有.首页非常全面,布置的非常合理,高计风格 ...
最新文章
- 基于STC8H8K64U声音信标采集和处理算法
- 让模糊图片变视频,找回丢失的时间维度,MIT这项新研究简直像魔术
- highcharts如何把图多余的空白页面_零基础如何快速学会WORD基础操作?有秘籍了.........
- ffmpeg之让视频快进
- CSDN博客下载器v2.4发布
- ESP8266制作天气预报海藻球微景观生态缸记录(一)
- 学期末总结——我体会的翻转课堂
- 如何做一名有趣的家长?
- 读书笔记之《内向者优势》
- android主题设置
- windows-phone-power-tools [wp 安装部署xap]
- 运算符优先级(总结)关于与的区别 ||与|的区别
- excel文件被写保护怎么解除_excel撤销写保护的教程
- Python爬虫BS4库的解析器正确使用方法
- 2021.03.24正则匹配符号
- 字节跳动面试凉经(挂三面)
- Apache Doris 技术调研
- 融资担保系统-助力企业的可持续发展
- python求一个小于该自然数的所有素数(或质数)
- 【测绘专用】中海达全站仪数据导入南方CASS