设计模式
常用设计模式详解
老周(重庆)
一个撸了10年代码的老鸟
展开
-
策略模式
策略模式鸭子游戏我们通过一个鸭子游戏的案例来逐步理解策略模式。这个游戏的需求很简单,大家可以想象一下这样一个画面,打开游戏界面,左边界面大部分区域是用来显示鸭子的,这些鸭子会在界面上游来游去,同时发出叫声,右面的小部分界面列出了当前游戏版本支持的鸭子类型,选择鸭子类型后就可以创建对应类型的鸭子出来,在左边的界面上显示出来。V1版本鸭子游戏V1版本实现,基于上面的需求,我们应用面向对象的知...原创 2019-10-03 10:34:54 · 352 阅读 · 0 评论 -
迭代器和组合模式
迭代器模式遍历菜单好消息,楼下的餐厅和早餐店合并了,现在我们可以在同一个地方享受早餐和午餐了。但在这个过程中,老板遇到了一些麻烦,需要你帮他解决。麻烦是,餐厅菜单类使用的是基于数组的菜单项,而早餐店菜单类使用的是基于列表的菜单项,因为这两个类在他们原来各自的系统中都是基础类,被依赖使用的地方很多,可不能简单粗暴的进行整合修改。如果保留两种不同的菜单表现形式,会带来什么问题?我们可以新创建...原创 2019-10-03 13:11:55 · 393 阅读 · 0 评论 -
模板方法模式
模板方法模式冲泡咖啡有些人没有咖啡就活不下去,有的人则离不开茶,两者的共同成分是什么?当然是咖啡因了。不仅仅如此,他们的冲泡方法都一样。咖啡的冲泡步骤是:把水煮沸用沸水冲泡咖啡倒进杯子加糖和牛奶而冲茶的步骤是:把水煮沸用沸水冲泡茶叶倒进杯子加柠檬V1版让我们快速搞定V1版本的咖啡和茶制作。咖啡类/** * 咖啡 */public clas...原创 2019-10-03 12:57:30 · 150 阅读 · 0 评论 -
适配器和外观模式
适配器模式说到适配器,我们现实生活中到处都是适配器,其中最容易被大家提起的就是电源适配器。比如墙上只有一个三孔的插座,而你的手机充电器是两孔的,这个时候你需要一个,一边是三脚,一边提供两个孔的适配器,来做一次插座接口转换。实际上,我们常使用的插线板就有这个功能,所以某些场景下它就是适配器。不兼容的API升级那么回到面向对象中来,假设现在你手上已有一个软件系统,集成了厂商的类;现在需要升级...原创 2019-10-03 11:57:33 · 295 阅读 · 0 评论 -
命令模式
命令模式万能遥控板前方售前团队带来了好消息,拿到了巴斯特家电自动化公司的业务。需求是这样的,这家公司正在设计一款遥控板,和普通的遥控板不同,它提供了若干按键,可以通过编程控制不同的家电,但这些家电是由不同的厂商开发出来的,比如小米的电视,格力的空调等,他们提供了不同的API。同时,按键可以扩展以便支持未来可能合作的家电。V1版我们一步一步来逐步分析实现。先实现第一版,如果要让遥控板控制电...原创 2019-10-03 11:48:36 · 196 阅读 · 0 评论 -
单例模式
单例模式苏格拉底式提问如何在JVM的整个生命周期中构建独一无二的对象?好像一下子还不是那么容易的就直接说清楚,那么我们来做一个问答游戏问:如何创建一个对象?答:new MyObject();问:另外一个对象想创建MyObject对象,可以new MyObject()吗?答:是的,当然可以问:所以,一旦拿到一个类,我们就可以多次实例化它?答:如果是公开(public)的类,就可以...原创 2019-10-03 11:39:46 · 173 阅读 · 0 评论 -
工厂模式【简单工厂、工厂方法、抽象工厂】
工厂方法模式披萨项目某天,你赚了钱,打算开一家自己的披萨店,披萨有若干种类,不过每种披萨的制作步骤都差不多,都要经过准备、烘烤、切片、装盒这几个步骤。非常自然,我们在设计中,会抽象出一个披萨的父类,父类中定义了披萨的制作步骤(prepare,bake,cut,box),不同的披萨有不同的准备过程,而烘烤、切片和装盒都一样操作,因此在父类中实现。具体的披萨类型继承父类,实现自己的准备过程。V1...原创 2019-10-03 11:22:35 · 254 阅读 · 0 评论 -
观察者模式
观察者模式气象站项目好消息,你们公司和气象站签订了一笔500W的项目,老板说只要顺利搞定了这个项目,奖励项目组成员到三亚晒太阳(6月的天…)。需求很简单,气象站会搜集湿度、温度、气压等气象数据,然后放到一个叫WeatherData对象中,现在需要我们来监控WeatherData对象,当里面的气象数据发生变更后,要将变更显示到布告板上,而布告板目前需要提供的有"目前状态"布告板,"气象统计"布...原创 2019-10-03 10:55:10 · 213 阅读 · 0 评论 -
装饰者模式
装饰者模式小蓝杯、谁不爱当我知道“小蓝杯”瑞幸咖啡前段时间(2019.6)在美国上市了,然后就去买了一杯试了下(首次免费),表示喝不习惯。今天我们就来研究下,怎么计算咖啡的金额。V1版本我们知道,咖啡有很多种类,不同的种类售价是不一样的,基于我们面向对象的知识,非常自然的会抽象出来一个饮料基类(除了咖啡,其他饮料也包括进来了),然后提供一个抽象的计算价格的方法,具体的咖啡类实现自己的价格计...原创 2019-10-03 10:48:04 · 217 阅读 · 0 评论 -
状态模式
状态模式项目组在使用观察者模式完成气象站项目之后,名声在外,这次又接到了来自于无人售货行业的万能糖果公司的订单。自助糖果售货机该公司要设计一款自动糖果售货机,开始时,售货机的状态是"没钱",投入钱后状态变为"有钱",然后转动曲柄,糖果机会吐出糖果。用一张状态图来表现如下:从这张图中,我们可以识别出售货机的状态:没钱、有钱、出售中、售罄。导致状态发生迁移的动作有:投钱、退钱、转动曲柄、发...原创 2019-10-03 13:21:46 · 179 阅读 · 0 评论