设计模式
一年而已
这个作者很懒,什么都没留下…
展开
-
设计模式学习笔记-职责链模式
学校的采购审批项目如果金额小于等于5000,由教学主任审批如果金额小于等于10000,由院长审批如果金额小于等于30000,由副校长审批如果金额大于30000,由校长审批传统方案解决传统方案的问题传统方式解决问题是接收一个采购项目后,根据采购金额来调用对应的Approver完成审批客户端会使用到分支判断来处理不同的采购请求,这样的话如果相关审批员可审核价格改变客户端需要重写。另外客户端需要知道每个审批员的可审核金额,存在强耦合不利于扩展职责链模式基本介绍职责链模式又叫责任链原创 2020-06-01 12:02:56 · 200 阅读 · 0 评论 -
设计模式学习笔记-策略模式
鸭子项目有各种鸭子(野鸭、北京鸭、水鸭等),鸭子有各种行为,飞、叫等显示鸭子信息传统方案解决传统方式实现鸭子问题1.Duckpublic abstract class Duck { public Duck() { } public abstract void display();//显示鸭子信息 public void quack() { System.out.println("鸭子嘎嘎叫~~"); } public void swim() { Syst原创 2020-06-01 11:25:16 · 146 阅读 · 0 评论 -
设计模式学习笔记-状态模式
APP抽奖活动加入每参加一次活动要扣除用户50积分,中奖概率是10%奖品数量固定,抽完就不能抽奖活动有四个状态:可以抽奖、不能抽奖、发放奖品和奖品领完状态转换图如下状态模式基本介绍状态模式主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题,状态和行为是一 一对应的,状态之间可以相互转换当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类原理类图Context类为环境角色,用于维护State实例,这个实例定义为当前状态state是抽象状态角色原创 2020-05-31 12:26:09 · 181 阅读 · 0 评论 -
设计模式学习笔记-解释器模式
四则运算问题先输入表达式的形式,比如a+b+c+d-e,要求表达式字母不能重复在分别输入a、b、c、d、e的值最后求出结果传统方案解决四则运算问题编写一个方法,接收表达式的形式,然后根据用户输入的数值进行解析,得到结果问题分析:如果加入新的运算符,不利于扩展解决方案:考虑解释器模式,即表达式–>解释器(可以设置多个)–>结果解释器模式基本介绍在编译原理中,一个算术表达式通过词法分析器形成词法单元,而后这些词法单元再通过语法分析器构建语法分析树,最终形成一颗抽象的语法原创 2020-05-30 16:58:13 · 173 阅读 · 0 评论 -
设计模式学习笔记-备忘录模式
游戏角色状态恢复问题游戏角色有攻击力和防御力,在大战boss前保存自身状态,当大战boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态传统方案解决一个对象,就对应一个保存对象状态的对象,这样不利于管理,开销很大传统的方式是简单的做备份,new出另一个对象,再把需要备份的数据放到这个新对象,但是这就暴露了对象内部细节备忘录模式基本介绍备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将对象回复到原先保存的状态备忘录对象主要用来记录原创 2020-05-26 11:06:23 · 228 阅读 · 0 评论 -
设计模式学习笔记-中介者模式
智能家庭项目智能家庭包括各种设备,闹钟、咖啡机、电视机、窗帘等主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作比如:闹钟响起–>咖啡机做咖啡–>窗帘自动落下–>电视机开始播放传统方案解决问题存在问题当各个电器对象有多种状态改变时,相互调用关系复杂各个电器对象彼此联系,你中有我,我中有你不利于松耦合各个对象之间所传递的消息容易混乱当系统增加一个新的电器对象时,或者执行流程改变时,代码不易维护和扩展中介者模式介绍中介者模式用一个中介对象封账一系原创 2020-05-25 11:30:50 · 192 阅读 · 0 评论 -
设计模式学习笔记-观察者模式
天气预报项目需求气象站可以将每天测量到的温度、湿度、气压等以公告的形式发布出去需要设计开放API,便于其他第三方也能接入气象站获取数据提供温度、气压和湿度接口测量数据更新时,要能实时通知第三方普通设计方案通过getXXX方法,可以让第三方接入,并获得相关消息当有数据更新时气象站通过dataChange()更新数据,右边箭头或者可以通过推送,左边箭头。普通方案代码解决(推送方式)1.WeatherData/** * 类是核心 * 1. 包含最新的天气情况信息 * 2.原创 2020-05-24 10:37:32 · 167 阅读 · 0 评论 -
设计模式学习笔记-迭代器模式
一个需求编写一个学校院系结构。在一个页面中展示出学校的院系组成,如何实现遍历传统方案解决会出现的问题将学院看成是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的实际上我们的要去是在一个页面中展示学校院系组成,一个学校有多个学院,一个学院有多个系,因此这种方案,不能很好实现遍历操作迭代器模式迭代器模式基本介绍迭代器模式属于行为型模式如果我们的集合元素是用不同的方式实现的,有数组,集合类或者还有其他方式,当客户端要遍历这些集合元素的时候就要使用多种遍历方法,而且会暴原创 2020-05-23 11:08:49 · 206 阅读 · 0 评论 -
设计模式学习笔记-访问者模式
测评系统需求将观众分为男人和女人,对歌手进行评价–成功、失败等传统方式解决问题分析如果系统比较小,还可以承受。但是考虑系统功能增加时,对代码改动较大,违反了ocp原则扩展性不好,比如增加新的人员类型,管理方法都不好弄访问者模式基本介绍访问者模式,封装了一些用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新操作主要将数据结构与数据操作分离,解决了数据额结构和操作耦合性问题访问者模式基本原理是在被访问的类里面加一个对外提供接待访问者的接口访问者模式主要原创 2020-05-22 12:25:31 · 197 阅读 · 0 评论 -
设计模式学习笔记-命令模式
智能生活项目需求我们买了一套智能家电,有照明灯、电扇、冰箱、洗衣机。我们只要在手机上装app就可以控制对这些家电工作这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个App,希望一个app可以控制全部家电要实现一个app控制所有智能家电的需要,则每个智能家电厂家都要提供一个统一的接口给app调用,这时就可以考虑使用命令模式。命令模式可将动作的请求者从动作的执行者对象中解耦出来在上述例子中,中座的请求者是手机app,动作的执行者是每个厂家的一个家电产品命令模式基本介绍命令模式:原创 2020-05-21 11:21:55 · 184 阅读 · 0 评论 -
设计模式学习笔记-模板方法模式
豆浆制作问题制作豆浆的流程 选材—添加配料—浸泡—磨豆浆通过添加不同的配料,可以制作出不同口味的豆浆选材、浸泡、磨豆浆这几个步骤对于制作每种口味的豆浆都是一样的模板方法模式基本介绍模板方法模式,又叫模板模式,在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需重写方法实现,但是调用将以抽象类中定义的方式进行模板方法模式就是定义了一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤这种设计模式属于行为型模式模板方法模原创 2020-05-20 12:05:34 · 107 阅读 · 0 评论 -
设计模式学习笔记-代理模式
代理模式介绍代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象。这么做的好处是可以在目标对象实现的基础上增强额外的功能操作,扩展目标对象的功能。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象代理模式有不同的形式,主要有三种 静态代理、动态代理(JDK代理,接口代理)和Cglib代理(可以在内存动态的创建对象,而不需要实现接口,属于动态代理的范畴)示意图静态代理静态代理使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理对象一起实现原创 2020-05-19 12:27:28 · 122 阅读 · 0 评论 -
设计模式学习笔记-享元模式
展示网站项目需求小型外包项目,给客户A做一个产品展示网站,客户A的朋友感觉效果不错,也希望做这样的产品展示网站但要求有些不同:有客户要求以新闻的形式发布有客人要求以博客的形式发布有客户希望以微信公众号的形式发布传统的解决方式1.直接复制粘贴一份,然后根据客户要求定制更改2.给每一个网站租用一个空间存在的问题需要的网站结构相似度很高,而且都不是高访问量网站,如果分成多个向虚拟空间相当于一个相同网站的实例对象很多,造成资源浪费解决思路整合到一个网站中,共享其相关的代码和数据,对于硬原创 2020-05-18 11:46:12 · 182 阅读 · 0 评论 -
设计模式学习笔记-外观模式
问题引入—影院管理项目组建一个家庭影院:DVD播放器,投影仪,自动屏幕,环绕立体声,爆米花机。要求完成家庭影院的功能,过程如下:直接用遥控器:统筹各设备开关开爆米花机放下屏幕开投影仪开音响开DVD,选dvd去拿爆米花调暗灯光播放观影结束后关闭各个设备传统的解决方式存在的问题:在ClientTest的main方法中,创建各个子系统的对象,并直接去调用子系统相关方法,会造成调用过程混乱。不利于在ClientTest中维护子系统的操作解决子路:定义一个高层接口,给子原创 2020-05-16 11:44:30 · 176 阅读 · 0 评论 -
设计模式学习笔记-组合模式
问题引入编写程序展示一个学校院系结构:在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系,如图:传统解决方案存在的问题:将学院看做学校的子类,系是学院的子类,这么做实际上是站在组织大小来进行分层次的实际上我们的要求是:在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系,因此这种方案不能很好的实现管理操作,比如对院系的添加,删除,遍历等解决方案: 将学校,院,系都看成是组织结构,他们之间没有继承的关系而是一个树形结构,可以更好的实现管理操作。组合原创 2020-05-14 11:14:33 · 127 阅读 · 0 评论 -
设计模式学习笔记-装饰者模式
星巴克咖啡项目不同种类的咖啡可以加不同调料要求可扩展性好用户可以点某类咖啡不加调料,也可以加调料较差的解决方案问题:类爆炸,比如增加一个咖啡种类或者一种调料类的数量就会倍增好点的方案把调料放入Drink中如下所示:说明:milk,soy,chocolate可以设计为Boolean,表示是否要添加相应的调料存在问题:可以控制类的数量,不至于造成很多类但在增加或删除调料种类时,代码维护量很大考虑用户添加多份调料时可以将hasMilk返回一个int类型装饰者模式定义原创 2020-05-13 16:25:36 · 121 阅读 · 0 评论 -
设计模式学习笔记-桥接模式
一个问题对不同品牌不同类别的手机进行相关操作(上网、打电话、开机、关机)传统的解决思路传统解决思路中的问题扩展性问题,容易引发类爆炸增加手机品牌或者手机类型时,需要扩充很多类违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机桥接模式基本介绍桥接模式是指将实现和抽象放在不同的类层次中,使两个层次可以独立改变。是一种结构性设计模式桥接模式基于类的最小设计原则,通过使用封装、聚合、继承等行为让不同的类承担不同的职责。它的主要特点是把抽象与行为实现分离开,从而可以保持各原创 2020-05-12 11:50:38 · 142 阅读 · 0 评论 -
设计模式学习笔记-适配器模式
基本介绍适配器模式将某个类的接口转换成客户端期望的另一个接口表示,主要目的是兼容性,让原本因接口不匹配的两个类可以协同工作。其别名为包装器。适配器模式属于结构型模式主要分为三类:类适配器模式、对象适配器模式、接口适配器模式工作原理适配器模式:将一个类的接口转换成另一种接口。让原本接口不兼容的类可以兼容从用户的角度看不到被适配这,是解耦的用户调用适配器转化出来的目标接口方法,适配器再调用被适配这的相关接口方法用户收到反馈结果,感觉只是和目标接口交互类适配器模式类适配器模式介绍Ad原创 2020-05-11 12:45:50 · 96 阅读 · 0 评论 -
设计模式学习笔记-建造者模式
需求引入盖房子打桩,砌墙,封顶房子各种各样,楼房,别墅传统方式解决方法类图代码实现1.抽象建房类public abstract class AbstractHouse { //打地基 public abstract void buildBasic(); //砌墙 public abstract void buildWalls(); //封顶 public abstract void roofed(); public void build() { buildBas原创 2020-05-10 11:29:07 · 122 阅读 · 0 评论 -
设计模式学习笔记-原型模式
克隆羊问题现有一只羊tom,具有姓名、年龄、颜色等属性,请克隆出多只完全相同的羊传统的解决方法代码1.定义一个Sheep类public class Sheep { private String name; private int age; private String color; public Sheep(String name, int age, String color)...原创 2020-05-08 12:37:19 · 167 阅读 · 0 评论 -
设计模式学习笔记-工厂模式
简单工厂模式一个具体需求: 披萨订购披萨有很多种类(ChinesePizza,CheesePizza)披萨有各自的制作流程(cut,bake,box)传统实现方式1.抽象pizza类package 工厂模式.pizza;//将Pizza 类做成抽象public abstract class Pizza { protected String name; //名字 //准...原创 2020-05-07 12:51:04 · 93 阅读 · 0 评论 -
设计模式学习笔记-单例模式
介绍单例模式就是采取一定方法保证整个软件系统中,对某个类只能存在一个对象实例,并且该类只能提供一个取得其对象的方法,一般为静态方法。单例模式的实现方式饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒汉式(线程安全,同步方法)懒汉式(线程安全,同步代码块)双重检查静态内部类枚举饿汉式(静态常量)实现步骤构造器私有化类的内部创建对象向外暴露一个公共静态方...原创 2020-05-05 11:42:48 · 200 阅读 · 0 评论 -
设计模式学习笔记-综述
一、设计模式的目的代码可重用可读性好可扩展性好可靠性好使程序呈现为高内聚低耦合二、设计模式的七大原则单一职责原则接口隔离原则依赖倒转原则里氏替换原则开闭原则迪米特法则合成复用原则单一职责原则基本介绍对类来说,一个类应该只负责一项职责。注意并不是只能只能有一个方法。注意事项:1.降低类的复杂度,一个类只负责一项职责2.提高类的可读性3.降低变更引起的风...原创 2020-05-04 12:36:49 · 95 阅读 · 0 评论