![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
老韩设计模式
文章平均质量分 91
啊… 像花虽未红,如冰虽不冻
OnebyWang
无限大な梦のあとの何もない世の中じゃ
展开
-
第 26 章 职责链模式
第 26 章 职责链模式1、OA 系统采购审批需求学校 OA 系统的采购审批项目: 需求是采购员采购教学器材如果金额 小于等于 5000,由教学主任审批 (0<=x<=5000)如果金额 小于等于 10000, 由院长审批 (5000<x<=10000)如果金额 小于等于 30000,由副校长审批 (10000<x<=30000)如果金额 超过 30000 以上,由校长审批 ( 30000<x)请设计程序完成采购审批项目2、传统方案解决 OA 系原创 2020-10-07 16:17:45 · 351 阅读 · 0 评论 -
第 25 章 策略模式
第 25 章 策略模式1、编写鸭子项# 第 26 章 职责链模式1、OA 系统采购审批需求学校 OA 系统的采购审批项目: 需求是采购员采购教学器材如果金额 小于等于 5000,由教学主任审批 (0<=x<=5000)如果金额 小于等于 10000, 由院长审批 (5000<x<=10000)如果金额 小于等于 30000,由副校长审批 (10000<x<=30000)如果金额 超过 30000 以上,由校长审批 ( 30000<x)请设计程序完原创 2020-10-07 16:17:09 · 230 阅读 · 0 评论 -
第 24 章 状态模式
第 24 章 状态模式1、APP 抽奖活动问题请编写程序完成APP抽奖活动,具体要求如下:假如每参加一次这个活动要扣除用户50积分,中奖概率是10%奖品数量固定,抽完就不能抽奖活动有四个状态:可以抽奖、不能抽奖、发放奖品和奖品领完活动的四个状态转换关系图2、状态模式基本介绍状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是原创 2020-10-07 16:16:31 · 442 阅读 · 0 评论 -
第 23 章 解释器模式
第 23 章 解释器模式1、四则运算问题通过解释器模式来实现四则运算,如计算a+b-c的值,具体要求先输入表达式的形式,比如 a+b+c-d+e,要求表达式的字母不能重复在分别输入 a, b, c, d, e 的值最后求出结果:如图2、传统方案解决四则运算问题分析编写一个方法,接收表达式的形式,然后根据用户输入的数值进行解析,得到结果问题分析:如果加入新的运算符,比如 ‘*’、’/’ ( 等等,不利于扩展, 另外让一个方法来解析会造成程序结构混乱,不够清晰解决方案:可以考虑使用解释原创 2020-10-07 16:15:59 · 294 阅读 · 0 评论 -
第 22 章 备忘录模式
第 22 章 备忘录模式1、游戏角色状态恢复问题游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力), 当大战Boss后攻击力和防御力下降, 然后从备忘录对象恢复到大战前的状态2、传统方案解决游戏角色恢复类图传统的方式的问题分析一个对象,就对应一个保存对象状态的对象, 这样当我们游戏的对象很多时,不利于管理,开销也很大传统的方式是简单地做备份, new 出另外一个对象出来,再把需要备份的数据放到这个新对象,但这就暴露了对象内部的细节解决方案: ==>原创 2020-10-07 16:15:29 · 188 阅读 · 0 评论 -
第 21 章 中介者模式
第 21 章 中介者模式1、智能家庭项目智能家庭项目:智能家庭包括各种设备,闹钟、咖啡机、电视机、窗帘 等主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为: 闹铃响起 --> 咖啡机开始做咖啡 --> 窗帘自动落下 --> 电视机开始播放2、传统方案解决智能家庭管理问题类图传统的方式的问题分析当各电器对象有多种状态改变时,相互之间的调用关系会比较复杂各个电器对象彼此联系, 你中有我,我中有你,不利于松耦合各个电器对象之间所传递原创 2020-10-07 16:14:56 · 201 阅读 · 0 评论 -
第 20 章 观察者模式
第 20 章 观察者模式1、天气预报项目需求天气预报项目需求,具体要求如下:气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去(比如发布到自己的网站或第三方)需要设计开放型API,便于其他第三方也能接入气象站获取数据提供温度、气压和湿度的接口测量数据更新时,要能实时的通知给第三方2、传统方式解决天气预报需求传统方式的思路WeatherData类通过对气象站项目的分析,我们可以初步设计出一个WeatherData类通过getXxx()方法,可以让第三方接入,并得原创 2020-09-22 20:15:23 · 507 阅读 · 0 评论 -
第 19 章 迭代器模式
第 19 章 迭代器模式1、学校院系展示需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。 如图:2、传统方案解决学校院系展示需求传统的方式的问题分析将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的实际上我们的要求是 : 在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的遍历的操作假如计算机学院的院系存储在数组中,信息工程学院的院系存储原创 2020-09-22 18:52:40 · 337 阅读 · 0 评论 -
第 18 章 访问者模式
第 18 章 访问者模式1、测评系统的需求完成测评系统需求将观众分为男人和女人,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(评价有不同的种类,比如成功、失败等)2、传统方式完成测评系统传统方式的问题分析如果系统比较小,还是ok的,但是考虑系统增加越来越多新的功能时,对代码改动较大,违反了ocp原则, 不利于维护传统方式的扩展性不好,比如增加了新的人员类型,或者管理方法,都不好扩展引出我们会使用新的设计模式 –-> 访问者模式3、访问者模式基本介绍访原创 2020-09-22 18:43:42 · 278 阅读 · 0 评论 -
第 17 章 命令模式
第 17 章 命令模式1、智能生活项目需求我们买了一套智能家电, 有照明灯、 风扇、 冰箱、 洗衣机, 我们只要在手机上安装 app 就可以控制对这些家电工作。这些智能家电来自不同的厂家, 我们不想针对每一种家电都安装一个 App, 分别控制, 我们希望只要一个 app 就可以控制全部智能家电。要实现一个 app 控制所有智能家电的需要, 则每个智能家电厂家都要提供一个统一的接口给 app 调用, 这时 就可以考虑使用命令模式。命令模式可将“动作的请求者”从“动作的执行者” 对象中解耦出来。在原创 2020-09-19 15:29:16 · 823 阅读 · 0 评论 -
第 16 章 模板方法模式
第 16 章 模板方法模式1、豆浆制作问题编写制作豆浆的程序, 说明如下:制作豆浆的流程:选材—>添加配料—>浸泡—>放到豆浆机打碎通过添加不同的配料, 可以制作出不同口味的豆浆选材、 浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的请使用模板方法模式完成 (说明:因为模板方法模式,比较简单,很容易就想到这个方案, 因此就直接使用,不再使用传统的方案来引出模板方法模式)2、模板方法模式基本介绍模板方法模式(Template Method Patter原创 2020-09-19 15:21:20 · 361 阅读 · 0 评论 -
第 15 章 代理模式
第 15 章 代理模式1、代理模式的基本介绍代理模式:为一个对象提供一个替身,以控制对这个对象的访问。 即通过代理对象访问目标对象。代理对象的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。被代理的对象可以是远程对象、 创建开销大的对象或需要安全控制的对象代理模式有不同的形式,主要有三种:静态代理、 动态代理 (JDK代理、接口代理)和 Cglib代理 (可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴) 。2、静态代码模式静态代码模式原创 2020-09-19 13:46:32 · 227 阅读 · 0 评论 -
第 14 章 享元模式
第 14 章 享元模式1、展示网站项目需求小型的外包项目,给客户A做一个产品展示网站, 客户A的朋友感觉效果不错,也希望做这样产品展示网站,但是要求都有些不同:有客户要求以新闻的形式发布客户人要求以博客的形式发布有客户希望以微信公众号的形式发布2、传统方案解决网站展现项目方案描述直接复制粘贴一份,然后根据客户不同要求,进行定制修改给每个网站租用一个空间方案设计示意图问题分析:传统方案解决网站展现项目需要的网站结构相似度很高,而且都不是高访问量网站,如果分成多个虚拟空间来原创 2020-09-19 13:35:01 · 278 阅读 · 0 评论 -
第 13 章 外观模式
第 13 章 外观模式1、影院管理项目组建一个家庭影院:DVD 播放器、 投影仪、 自动屏幕、 环绕立体声、 爆米花机,要求完成使用家庭影院的功能, 其过程为:直接用遥控器统筹各设备开关开爆米花机放下屏幕开投影仪开音响开 DVD, 选 DVD去拿爆米花调暗灯光播放观影结束后, 关闭各种设备2、传统方式解决影院管理每个设备都对应于一个类,导致客户端使用时,直接依赖于具体的类传统方式解决影院管理问题分析在 ClientTest 的main方法中,创建各个子系统的对象,并原创 2020-09-19 13:29:34 · 322 阅读 · 0 评论 -
第 12 章 组合模式
第 12 章 组合模式1、学校院系展示需求看一个学校院系展示需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。 如图:2、传统方案解决学校院系展示传统方案解决学校院系展示(类图)传统方案解决学校院系展示存在的问题分析将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此继承这种方案,不原创 2020-09-19 13:21:04 · 530 阅读 · 1 评论 -
第 11 章 装饰者设计模式
第 11 章 装饰者设计模式1、星巴克咖啡订单项目星巴克咖啡订单项目(咖啡馆)咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、 ShortBlack、 LongBlack(美式咖啡)、 Decaf(无因咖啡)调料: Milk、 Soy(豆浆)、 Chocolate要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便使用OO的来计算不同种类咖啡的费用:客户可以点单品咖啡,也可以单品咖啡 + 调料组合方案1:解决星巴克咖啡订单问题分析Drink 是一个抽象父类,表示原创 2020-09-18 20:25:44 · 308 阅读 · 0 评论 -
第 10 章 桥接模式
第 10 章 桥接模式1、手机操作问题现在对不同手机类型、不同品牌的手机实现操作编程(比如:开机、关机、上网,打电话等)2、传统方案解决手机问题类图传统方案解决手机操作问题分析扩展性问题(类爆炸), 如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加一个手机品牌,也要在各个手机样式类下增加违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本解决方案 --> 使用桥接模式3、桥接模式基本介绍桥接模式(Br原创 2020-09-18 20:17:10 · 267 阅读 · 0 评论 -
第 9 章 适配器设计模式
第 9 章 适配器设计模式1、适配器模式基本介绍现实生活中的适配器例子泰国旅游使用插座问题:泰国插座用的是两孔的(欧标) ,可以买个多功能转换插头 (适配器) ,这样就可以使用了适配器模式基本介绍适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。适配器的别名为包装器(Wrapper),适配器模式属于结构型模式主要分为三类:类适配器模式、对象适配器模式、接口适配器模式2原创 2020-09-18 20:11:05 · 306 阅读 · 0 评论 -
第 8 章 建造者模式
第 8 章 建造者模式1、盖房项目实际需求需要建房子:这一过程为打桩、 砌墙、封顶房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是各自实现的细节不同请编写程序,完成需求2、传统方式解决盖房问题类图代码实现AbstractHouse:房子的抽象父类,指定建造房子的规范,以及建造房子的具体流程public abstract class AbstractHouse { // 打地基 public abstract void buildBasic();原创 2020-09-18 19:56:12 · 269 阅读 · 0 评论 -
第 7 章 原型模式
第 7 章 原型模式1、克隆羊问题克隆羊问题描述现在有一只羊tom, 姓名为: tom,年龄为: 1, 颜色为:白色,请编写程序创建和tom羊属性完全相同的10只羊传统模式解决克隆羊问题类图代码实现Sheep:羊的实体类public class Sheep { private String name; private int age; private String color;Client:客户端,发出克隆羊的指令public class Client {原创 2020-09-18 19:47:45 · 391 阅读 · 0 评论 -
第 6 章 工厂模式
第 6 章 工厂模式1、简单工厂模式简单工厂模式的实际需求看一个披萨的项目:要便于披萨种类的扩展,要便于维护披萨的种类很多(比如 GreekPizz、CheesePizz 等)披萨的制作有 prepare、bake、cut、box完成披萨店订购功能传统方式的代码实现类图设计代码实现Pizza 抽象父类//将Pizza 类做成抽象public abstract class Pizza { protected String name; //名字 public原创 2020-09-17 09:39:55 · 296 阅读 · 0 评论 -
第 5 章 单例设计模式
第 5 章 单例设计模式1、单例设计模式介绍所谓类的单例设计模式, 就是采取一定的方法保证在整个的软件系统中, 对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。比如 Hibernate 的 SessionFactory, 它充当数据存储源的代理, 并负责创建 Session 对象。SessionFactory 并不是轻量级的, 一般情况下, 一个项目通常只需要一个 SessionFactory 就够,这是就会使用到单例模式。2、单例设计模式八种方式单例模式有八原创 2020-09-16 14:54:42 · 262 阅读 · 0 评论 -
第 4 章 设计模式概述
第 4 章 设计模式概述1、设计模式的层次第 1 层: 刚开始学编程不久, 听说过什么是设计模式第 2 层: 有很长时间的编程经验, 自己写了很多代码, 其中用到了设计模式, 但是自己却不知道第 3 层: 学习过了设计模式, 发现自己已经在使用了, 并且发现了一些新的模式挺好用的第 4 层: 阅读了很多别人写的源码和框架, 在其中看到别人设计模式, 并且能够领会设计模式的精妙和带来的好处。第 5 层: 代码写着写着, 自己都没有意识到使用了设计模式, 并且熟练的写了出来。2、设计模式介绍原创 2020-09-16 14:48:18 · 194 阅读 · 0 评论 -
第 3 章 UML 类图
第 3 章 UML 类图1、安装 UML 插件Eclipse安装AmaterasUML参考资料:https://blog.csdn.net/lsh1358046425/article/details/80068644安装GEF插件先到 Eclipse 官网上找到AmaterasUML插件的下载地址打开 Eclipse 的 【Install New Software】我们复制上面的插件下载地址,粘贴至地址栏中,点击【Select All】,安装全部插件,然后一顿Next和原创 2020-09-16 14:37:32 · 453 阅读 · 1 评论 -
第 2 章 设计模式七大原则
第 2 章 设计模式七大原则1、设计模式的目的编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战, 设计模式是为了让程序(软件),具有如下更好的特性代码重用性 (即:相同功能的代码,不用多次编写)可读性 (即:编程规范性,便于其他程序员的阅读和理解)可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护)可靠性 (即:当我们增加新的功能后,对原来的功能没有影响)使程序呈现高内聚, 低耦合的特性分享金句:设计模式包含了面向对象原创 2020-09-16 14:33:55 · 583 阅读 · 2 评论 -
第 1 章 Readme
第 0 章 Readme1、参考资料尚硅谷Java设计模式(图解+框架源码剖析)2、笔记地址老韩设计模式原创 2020-12-28 16:48:25 · 230 阅读 · 0 评论