
详解23种设计模式
文章平均质量分 91
程序猿二鍋頭
卷起来!
展开
-
设计模式 -职责链模式
学校 OA 系统的采购审批项目:需求是采购员采购教学器材1) 如果金额 小于等于 5000, 由教学主任审批 (0<=x<=5000)2) 如果金额 小于等于 10000, 由院长审批 (5000<x<=10000)3) 如果金额 小于等于 30000, 由副校长审批 (10000<x<=30000)4) 如果金额 超过 30000 以上,有校长审批 ( 30000<x)请设计程序完成采购审批项目传统方案...原创 2021-07-04 10:35:59 · 167 阅读 · 0 评论 -
设计模式 -策略模式
编写鸭子项目,具体要求如下:有各种鸭子(比如 野鸭、北京鸭、水鸭等, 鸭子有各种行为,比如 叫、飞行等) 显示鸭子的信息传统方案解决鸭子问题的分析和代码实现传统的设计方案(类图) 代码实现 package com.atguigu.strategy;/** * @Author panghl * @Date 2021/7/4 9:12 * @Description 鸭子类 **/public abstract class Duck { public Duck() {原创 2021-07-04 09:53:27 · 123 阅读 · 0 评论 -
设计模式- 备忘录模式
游戏角色状态恢复问题游戏角色有攻击力和防御力,在大战 Boss 前保存自身的状态(攻击力和防御力),当大战 Boss 后攻击力和防御力下降,从备忘录对象恢复到大战前的状态传统方案解决游戏角色恢复传统的方式的问题分析一个对象,就对应一个保存对象状态的对象, 这样当我们游戏的对象很多时,不利于管理,开销也很大. 传统的方式是简单地做备份,new 出另外一个对象出来,再把需要备份的数据放到这个新对象,但这就暴露了对象内部的细节 解决方案: => 备忘录模式备忘录模式基本原创 2021-07-03 14:19:02 · 133 阅读 · 0 评论 -
设计模式- 中介模式
智能家庭项目智能家庭项目:智能家庭包括各种设备,闹钟、咖啡机、电视机、窗帘 等 主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为:闹铃响起->咖啡机开始做咖啡->窗帘自动落下->电视机开始播放传统方案解决智能家庭管理问题传统的方式的问题分析当各电器对象有多种状态改变时,相互之间的调用关系会比较复杂 各个电器对象彼此联系,你中有我,我中有你,不利于松耦合. 各个电器对象之间所传递的消息(参数),容易混乱 当系统增加一个新..原创 2021-07-03 13:38:06 · 127 阅读 · 0 评论 -
设计模式- 观察者模式
观察者模式原理观察者模式类似订牛奶业务 奶站/气象局:Subject 用户/第三方网站:ObserverSubject:登记注册、移除和通知registerObserver 注 册 removeObserver 移 除 notifyObservers() 通知所有的注册的用户,根据不同需求,可以是更新数据,让用户来取,也可能是实施推送, 看具体需求定Observer:接收输入 观察者模式:对象之间多对一依赖的一种设计方案,被依赖的对象为 Subject,依赖的对象为 Observer,S原创 2021-07-03 01:22:17 · 157 阅读 · 1 评论 -
设计模式- 迭代器模式
看一个具体的需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院, 一个学院有多个系。如图:传统的设计方案(类图)传统的方式的问题分析将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的 实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的遍历的操作解决方案:=> 迭代器模式迭代器模式基本介绍迭代器模式(Itera原创 2021-07-03 00:46:52 · 94 阅读 · 0 评论 -
设计模式- 访问者模式
测评系统的需求完成测评系统需求将观众分为男人和女人,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(评价 有不同的种类,比如 成功、失败 等)传统方式的问题分析如果系统比较小,还是 ok 的,但是考虑系统增加越来越多新的功能时,对代码改动较大,违反了 ocp 原则, 不利于维护 扩展性不好,比如 增加了 新的人员类型,或者管理方法,都不好做 引出我们会使用新的设计模式 – 访问者模式访问者模式基本介绍访问者模式(Visitor Pattern),封装一些原创 2021-07-02 23:06:07 · 145 阅读 · 1 评论 -
设计模式-结构型模式 命令模式
智能生活项目需求我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,我们只要在手机上安装 app 就可以控制对这些家电工作。 这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个 App,分别控制,我们希望只要一个 app就可以控制全部智能家电。 要实现一个 app 控制所有智能家电的需要,则每个智能家电厂家都要提供一个统一的接口给 app 调用,这时 就可以考虑使用命令模式。 命令模式可将“动作的请求者”从“动作的执行者”对象中解耦出来. 在我们的例子中,动作的请求者是手机 app,动原创 2021-06-29 19:49:13 · 197 阅读 · 1 评论 -
设计模式-结构型模式 模板方法模式
豆浆制作问题编写制作豆浆的程序,说明如下:制作豆浆的流程 选材--->添加配料--->浸泡--->放到豆浆机打碎 通过添加不同的配料,可以制作出不同口味的豆浆 选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的请使用 模板方法模式 完成 (说明:因为模板方法模式,比较简单,很容易就想到这个方案,因此就直接使用, 不再使用传统的方案来引出模板方法模式 )模板方法模式基本介绍模板方法模式(Template Method Pat...原创 2021-06-28 23:12:48 · 117 阅读 · 1 评论 -
设计模式-结构型模式 享元模式
展示网站项目需求小型的外包项目,给客户 A 做一个产品展示网站,客户 A 的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都有些不同:有客户要求以新闻的形式发布 有客户人要求以博客的形式发布 有客户希望以微信公众号的形式发布传统方案解决网站展现项目直接复制粘贴一份,然后根据客户不同要求,进行定制修改 给每个网站租用一个空间 方案设计示意图统方案解决网站展现项目-问题分析需要的网站结构相似度很高,而且都不是高访问量网站,如果分成多个虚拟空间来处理,相当于一个相同网站原创 2021-06-27 23:12:19 · 129 阅读 · 1 评论 -
设计模式-结构型模式 外观模式
影院管理项目组建一个家庭影院:DVD 播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为:直接用遥控器:统筹各设备开关 开爆米花机放 下 屏 幕 开 投 影 仪 开音响 开 DVD,选 dvd 去拿爆米花 调 暗 灯 光 播放 观影结束后,关闭各种设备传统方式解决影院管理传统方式解决影院管理问题分析在 ClientTest 的 main 方法中,创建各个子系统的对象,并直接去调用子系统(对象)相关方法,会造成调用过程混乱,没原创 2021-06-27 22:08:37 · 136 阅读 · 1 评论 -
设计模式-结构型模式 组合模式
看一个学校院系展示需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院, 一个学院有多个系。如图:传统方案解决学校院系展示(类图)传统方案解决学校院系展示存在的问题分析将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的 实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系,此这种方案,不能很好实现的管理的操作,比如对学院、系的添加,删除,遍历等 解决方案:把原创 2021-06-26 12:21:19 · 415 阅读 · 0 评论 -
设计模式-结构型模式(7)装饰者模式
星巴克咖啡订单项目(咖啡馆):咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)调料:Milk、Soy(豆浆)、Chocolate要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便使用OO的来计算不同种类咖啡的费用: 客户可以点单品咖啡,也可以单品咖啡+调料组合方案1-解决星巴克咖啡订单问题分析Drink 是一个抽象类,表示饮料des就是对咖啡的描述, 比如咖啡的名字cost() 方法就是计算原创 2021-06-26 10:34:13 · 131 阅读 · 0 评论 -
设计模式-结构型模式(6)桥接模式
桥接模式手机操作问题现在对不同手机类型的 不同品牌实现操作编程(比如: 开机、关机、上网,打电话等), 如图:传统方案解决手机使用问题(类图):传统方案解决手机操作问题分析1) 扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品 牌手机的类,同样如果我们增加一个手机品牌,也要在各个手机样式类下增加。2) 违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这 样增加了代码维护成本.3) 解决方案-使用桥接模式桥接模式..原创 2021-05-11 23:36:52 · 192 阅读 · 0 评论 -
设计模式-结构型模式(5)适配器模式
适配器模式现实生活中的适配器例子泰国插座用的是两孔的(欧标),可以买个多功能转换插头 (适配器) ,这样就可以 使用了。适配器模式基本介绍 基本介绍1) 适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表 示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同 工作。其别名为包装器(Wrapper)2) 适配器模式属于结构型模式3) 主要分为三类:类适配器模式、对象适配器模式、接口适配器模式适配器模式工作原理..原创 2021-05-09 23:49:19 · 271 阅读 · 1 评论 -
设计模式-创建型模式-(4)建造者模式
盖房项目需求 需要建房子:这一过程为 打桩、砌墙、封顶 房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的。 请编写程序,完成需求 传统方式解决盖房需求 思路分析(图解) 代码实现 package com.atguigu.builder;/** * @Author panghl * @Date 2021/4/17 11:38 * @Description TODO **/public abstract .原创 2021-04-17 15:20:17 · 101 阅读 · 0 评论 -
设计模式-创建型模式-(3)原型模式
原型模式克隆羊问题现在有一只羊 tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和 tom 羊 属性完全相同的 10只羊。传统方式解决克隆羊问题思路分析(图解) 代码 package com.atguigu.prototype;/** * @Author panghl * @Date 2021/4/13 21:06 * @Description 克隆羊 **/public class Sheep { private String na.转载 2021-04-13 22:43:57 · 116 阅读 · 0 评论 -
设计模式-创建型模式-(2)工厂模式
工厂模式看一个具体的需求看一个披萨的项目:要便于披萨种类的扩展,要便于维护披萨的种类很多(比如 GreekPizz、CheesePizz 等) 披萨的制作有 prepare,bake, cut, box 完成披萨店订购功能。使用传统的方式来完成思路分析(类图) 编写 OrderPizza.java 去订购需要的各种 Pizza(传统方式) package com.atguigu.factory.simplefactory.pizzastore.pizza;/..转载 2021-04-12 22:40:39 · 119 阅读 · 0 评论 -
设计模式-创建型模式-(1)单例模式
单例模式单例设计模式介绍所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例, 并且该类只提供一个取得其对象实例的方法(静态方法)。比如 Hibernate 的 SessionFactory,它充当数据存储源的代理,并负责创建 Session 对象。SessionFactory 并不是轻量级的,一般情况下,一个项目通常只需要一个 SessionFactory 就够,这是就会使用到单例模式。单例设计模式八种方式单例模式有八种方式:饿汉式(静.转载 2021-04-08 22:13:55 · 101 阅读 · 0 评论 -
UML类图
UML 基本介绍UML——Unified modeling language UML (统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果 UML 本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等,如右图:UML 图画 UML 图与写文章差不多,都是把自己的思想描述给别人看,关键在于思路和条理,UML 图分类:用例图(use c.原创 2021-04-08 00:16:46 · 508 阅读 · 0 评论 -
设计模式的七大原则详解
设计模式常用的七大原则:1)单一职责原则2)接口隔离原则3)依赖倒转原则4)里氏替换原则5)开闭原则 ocp (工厂设计模式)6)迪米特法则7)合成复用原则原创 2021-04-06 23:44:06 · 324 阅读 · 1 评论