“老张开车去东北 撞了 肇事司机耍流氓 跑了 多亏一个东北人 送到医院缝五针 好了 ……翠花,上酸菜”

“老张开车去东北”,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模式)相关推荐

  1. 游戏破解引发盈利模式思考

    最近公司两款游戏在国内大型论坛发现破解版,让我们一直感觉遥远的"版权"问题瞬间来到身边,使我们措手不及,我们还是按照正常流程跟论坛发邮件删除该贴,支持国内原创游戏.2天时间内发现2 ...

  2. 幽灵代码删库跑路引发的分支模式思考

    Photo @  Akshar Dave 文  |  故知 背景--讲个真实的"鬼"故事 菜鸟 CTO 线研发效能团队开发了一个大促协同平台,来提高大家在处理大促相关工作时的协同效 ...

  3. 增长的旋律——AARRR模式思考(二)

         作者:livan      来源:数据python战算法 前情介绍 上一篇文章:增长的旋律--AARRR模式思考(一),介绍了AARRR模型中的"Acquisition获取用户&q ...

  4. GitChat 被恶意攻击引发的技术性思考:拒绝服务攻击

    本文来自作者 肖志华 在 GitChat 上分享 「GitChat 被恶意攻击引发的技术性思考:拒绝服务攻击」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 拒绝服务的类型很多,挑几个有特 ...

  5. 常见软件项目开发模式思考

    一.软件项目 在2000左右 程序员还是一种比较罕见的工作,那是的个人台式机还是当时富裕家庭的高级娱乐用品,一开始网络程序员部分前后端,PHP.JSP.ASP这些技术形成了最早的网络程序.BS 系统 ...

  6. NSObject到底多么大引发的一些思考

    NSObject到底多么大引发的一些思考 本文引用及参考文献,感谢一下博主的分享: C++ 内存对齐-by enos 小码哥iOS学习笔记第一天: Objective-C的本质-by 冰凌天 Obje ...

  7. 关于“找老婆”问题引发的深入思考

    浅谈"数学家.理论计算机科学家.工程师的区别" 关于"找老婆"问题引发的深入思考 有一天,三个朋友一起去吃烧烤.他们分别是数学家,理论计算机科学家,计算机工程师 ...

  8. 可调时钟的闹钟模式(接上篇)

    写在前面: 上篇文末提到可以优化的地方包括加入闹钟,了解无源蜂鸣器的工作原理后,就着手扩展闹钟设置功能了,同时按键按下加入蜂鸣器的提示音.由于上篇的篇幅过长了,所以决定单独写一篇这个闹钟模块. 一.实 ...

  9. 电子商务商业模式思考

    一.B2B电子商务网站: 阿里巴巴,环球资源内贸网,中国制造网,慧聪网,金银岛,网盛 1.阿里巴巴 特点:具有完善的功能和简单易懂的操作.坚持做任何生意的人都有.首页非常全面,布置的非常合理,高计风格 ...

最新文章

  1. 基于STC8H8K64U声音信标采集和处理算法
  2. 让模糊图片变视频,找回丢失的时间维度,MIT这项新研究简直像魔术
  3. highcharts如何把图多余的空白页面_零基础如何快速学会WORD基础操作?有秘籍了.........
  4. ffmpeg之让视频快进
  5. CSDN博客下载器v2.4发布
  6. ESP8266制作天气预报海藻球微景观生态缸记录(一)
  7. 学期末总结——我体会的翻转课堂
  8. 如何做一名有趣的家长?
  9. 读书笔记之《内向者优势》
  10. android主题设置
  11. windows-phone-power-tools [wp 安装部署xap]
  12. 运算符优先级(总结)关于与的区别 ||与|的区别
  13. excel文件被写保护怎么解除_excel撤销写保护的教程
  14. Python爬虫BS4库的解析器正确使用方法
  15. 2021.03.24正则匹配符号
  16. 字节跳动面试凉经(挂三面)
  17. Apache Doris 技术调研
  18. 融资担保系统-助力企业的可持续发展
  19. python求一个小于该自然数的所有素数(或质数)
  20. 【测绘专用】中海达全站仪数据导入南方CASS

热门文章

  1. python爬虫读取pdf_python爬虫处理在线预览的pdf文档
  2. 特殊的一些vi指令(快捷键)
  3. 如何设置微信公众号的测试号的菜单
  4. 音视频基础知识-时间戳的理解
  5. windows更新错误0x8024401c
  6. python-探索性数据分析-足球赛事数据集
  7. c语言把char转化为string,浅析string 与char* char[]之间的转换
  8. 在这个互联网加的时代,我们能做些什么呢?
  9. Linux 安装Mysql8.0.15教程,以及修改密码
  10. python3 迭代器(自定义迭代器)