设计模式
文章平均质量分 92
程序胖
这个作者很懒,什么都没留下…
展开
-
设计模式学习(二十二)职责链模式
职责链模式前言先思考一下以下案例:传统方式解决:接收到一个采购请求后,根据采购金额来调用对应的 Approver (审批人)完成审批。传统方式的问题分析 : 客户端这里会使用到分支判断,比如 switch 来对不同的采购请求处理, 这样就存在如下问题(1) 如果各个级别的人员审批金额发生变化,在客户端的也需要变化(2) 客户端必须明确的知道有多少个审批级别和访问这样对一个采购请求进行处理 和 Approver ( 审批人 ) 就存在强耦合关系,不利于代码的扩展和维护原创 2020-11-04 16:47:53 · 85 阅读 · 0 评论 -
设计模式学习(二十一)策略模式
文章目录策略模式前言基本介绍具体的代码实现总结策略模式前言现在要求解决下面一个鸭子的问题:用传统的方式来写就是创建一个鸭子的抽象类,然后野鸭,北京鸭,水鸭等继承这个抽象类来实现。代码的实现://鸭子的抽象类public abstract class Duck { public Duck() { } public abstract void display();//显示鸭子信息 public void quack() { System.out.println("鸭原创 2020-11-04 15:02:28 · 196 阅读 · 0 评论 -
设计模式学习(二十)状态模式
文章目录状态模式基本介绍应用举例总结状态模式基本介绍状态模式( State Pattern ):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类类图:Context 类为环境角色 , 用于维护 State 实例这个实例定义当前状态State 是抽象状态角色定义一个接口封装与 Context 的一个特点接口相关行为ConcreteState 具体的状态角色原创 2020-11-02 17:11:39 · 79 阅读 · 0 评论 -
设计模式学习(十九)解释器模式
解释器模式前言通过一下案例来发现问题用传统的方式去解决这类问题:编写一个方法,接收表达式的形式,然后根据用户输入的数值进行解析,得到结果。而这类方式的问题是:如果加入新的运算符,比如 * / 等等,不利于扩展, 另外让一个方法来解析会造成程序结构混乱,不够清晰。解决方式:使用解释器模式去实现基本介绍在编译原理中一个算术表达式通过词法分析器形成词法单元,而后这些词法单元再通过语法分析器构建语法分析树,最终形成一颗抽象的语法分析树 。这里的词法分析器和语法分析器都可以看做是解释器。解释器原创 2020-11-02 14:42:22 · 116 阅读 · 0 评论 -
设计模式学习(十八)中介者模式
文章目录中介者模式前言基本介绍应用实现总结中介者模式前言首先通过一个案例来演示:传统模式来解决的话,类图就是这样的:问题分析:当各电器对象有多种状态改变时,相互之间的调用关系会比较复杂各个电器对象彼此联系你中有我,我中有你,不利于松耦合各个电器对象之间所传递的消息参数 ,容易混乱当系统增加一个新的电器对象时,或者执行流程改变时,代码的可维护性、扩展性都不理想解决方法:使用中介者模式基本介绍中介者模式用一个中介对象来封装一系列的对象交互。中介者使各个对象原创 2020-11-02 09:39:53 · 330 阅读 · 0 评论 -
设计模式学习(十七)备忘录模式
文章目录备忘录模式前言基本介绍应用举例总结备忘录模式前言通过一个小的案例来了解一下:传统方式解决游戏角色恢复的问题:通过创建一个对象来存储一个对象状态传统方式的问题:一个对象,就对应一个保存对象状态的对象, 这样当我们游戏的对象很多时,不利于管理,开销也很大传统的方式是简单地做备份 new 出另外一个对象出来,再把需要备份的数据放到这个新对象,但这就暴露了对象内部的细节所以就需要备忘录模式基本介绍备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存原创 2020-10-28 14:43:18 · 199 阅读 · 0 评论 -
设计模式学习(十六)观察者模式
文章目录观察者模式前言基本介绍具体应用实现总结观察者模式前言先通过一个问题来看首先想到一个普通方案:普通方案的类图就是:代码实现:/** * 显示当前天气情况(可以理解成是气象站自己的网站) * */public class CurrentConditions { // 温度,气压,湿度 private float temperature; private float pressure; private float humidity; //更新 天气情况,是原创 2020-10-27 15:21:45 · 108 阅读 · 0 评论 -
设计模式学习(十五)迭代器模式
目录迭代器模式前言基本介绍应用具体实现总结迭代器模式前言通过一个案例来说明为什么要使用迭代器模式如果用传统方式来做就是学校是父类,学院继承学校,专业继承学院,这个传统的方式有一个很大的问题就是不能很好的实现遍历操作,就比如果计算机学院的专业是数组来存储的,而信息工程学院的专业是集合来存储的,这样用传统方式遍历的时候就会相当麻烦。而解决的方法就是使用迭代器模式基本介绍迭代器模式是常用的设计模式,属于行为型模式如果我们的集合元素是用不同的方式实现的有数组 ,还有 java 的集合类,或原创 2020-10-27 11:24:48 · 213 阅读 · 0 评论 -
设计模式学习(十四)访问者模式
访问者模式前言首先通过一个案例来看看为何要访问者模式:传统方法分析:如果系统比较小,还是 ok 的,但是考虑系统增加越来越多新的功能时,对代码改动较大,违反了 ocp 原则, 不利于维护扩展性不好,比如增加了新的人员类型,或者管理方法,都不好做基本介绍访问者模式封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作 。主要将数据结构与数据操作分离,解决数据结构和操作耦合性问题访问者模式的基本工作原理是: 在被访问的类里面加一个对外提供接原创 2020-10-26 16:56:40 · 366 阅读 · 0 评论 -
设计模式学习(十三)命令模式
目录命令模式基本介绍应用举例总结命令模式基本介绍命令模式,在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计命名模式使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦。在命名模式中,会将一个请求封装为一个对象 以便使用不同参数来表示不同的请 求,即命名,同时命令模式也支持可撤销的操作。通俗易懂的理解:将军发布命令,士兵去执行。其中原创 2020-10-26 14:12:45 · 219 阅读 · 0 评论 -
设计模式学习(十二)模板模式
模板模式基本介绍模板方法模式( Template Method Pattern ),又叫模板模式 (Template Pattern) 在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行 。简单说, 模板方法模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤这种类型的设计模式属于行为型模式 。类图实现:应用举例实现类图代码实现//模板类publi原创 2020-10-23 17:51:57 · 77 阅读 · 0 评论 -
设计模式学习(十一)代理模式
目录代理模式基本介绍静态代理基本介绍应用实例总结动态代理基本介绍代码实现Cglib代理总结代理模式基本介绍代理模式:为一个对象提供一个替身 ,以控制对这个对象的访问。 即通过代理对象访问目标对象 这样做的 好处是 可以在目标对象实现的基础上 增强额外的功能操作即扩展目标对象的功能。被代理的对象可以是远程对象 、创建开销大的对象或需要安全控制的对象代理模式有不同的形式 , 主要有三种静态代理 、 动态代理 (JDK 代理、接口代理 和Cglib代理可以在内存动态的创建对象,而不需要实现接口, 他是原创 2020-10-22 18:22:54 · 363 阅读 · 0 评论 -
设计模式学习(十)享元模式
目录享元模式前言基本介绍具体演示总结享元模式前言通过案例来了解享元模式:用传统方式来解决:这种解决方式的问题是需要的网站结构相似度很高 ,而且都不是高访问量网站,如果分成多个虚拟空间来处理,相当于一个相同网站的实例对象很多 ,造成服务器的资源浪费。解决方式:整合到一个网站中,共享其相关的代码和数据 ,对于硬盘、内存、CPU 、数据库空间等服务器资源都可以达成共享,减少服务器资源。使用享元模式。基本介绍原理图享元模式提出了两个要求:细粒度和共享对象 。这里就涉及到内部状态和外部原创 2020-10-22 14:22:28 · 308 阅读 · 1 评论 -
设计模式学习(九)外观模式
目录外观模式前言基本介绍具体实现总结外观模式前言通过一个影院管理项目来了解外观模式传统方式解决方法为:传统方式的问题:在 ClientTest 的 main 方法中,创建各个子系统的对象,并直接去调用子系统 对象相关方法,会造成调用过程混乱,没有清晰的过程,不利于在 ClientTest 中,去维护对子系统的操作解决办法:定义一个高层接口,给子系统中的一组接口提供一个一致的界面比如在高层接口提供四个方法 ready, play, pause, end,用来访问子系统中的一群接口也就是说就是原创 2020-10-21 16:01:55 · 250 阅读 · 0 评论 -
设计模式学习(八)组合模式
目录组合模式前言基本介绍具体应用实现总结组合模式前言首先通过一个问题来发现组合模式是怎样来的传统的解决方法是通过系继承学院,学院继承学校来实现的而这种方式就有很大的问题:将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的,实际上我们的要求 是 在 一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的管理的操作,比如对学院,系的添加,删除,遍历等解决方案:把学校、院、系 都看做是组织结构,他们之间没有继承的关原创 2020-10-21 10:58:38 · 235 阅读 · 0 评论 -
设计模式学习(七)装饰者模式
目录装饰者模式前言基本介绍具体案例实现装饰者模式总结装饰者模式前言通过一个案例来解释为什么要用装饰模式要完成这个案例的方法有很多种,传统方式是这样解决的:根据上面一个方案的问题,提出了一个更好一点的方案:但是方案二还是有问题,在增加和删除调料的时候,代码的维护量还是很多。所以就是用装饰者模式去解决这一案例基本介绍装饰者模式: 动态的 将新功能 附加到对象上 。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则这里提到的动态的将新功能附加到对象 和原创 2020-10-20 16:24:43 · 194 阅读 · 0 评论 -
设计模式学习(六)桥接模式
目录桥接模式前言基本介绍代码实现桥接模式的总结桥接模式前言通过一个案例来看为什么要使用桥接模式如果要用传统方式编程的话,就要创建这些代码:问题分析:这种方式编程的话,代码的扩展性就不好,比如如果真假一部手机,所有类型都要加,如果要加一个类型的话,又要在新的类型中添加所有手机违反了 单 一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本解决方式:使用桥接模式基本介绍桥接模式 (Bridge 模 式 是指 :将 实现 与 抽象 放在两个不同的类原创 2020-10-19 18:05:32 · 290 阅读 · 0 评论 -
设计模式学习(五)适配器模式
目录适配器模式介绍工作原理类适配器模式对象适配器模式适配器模式总结适配器模式介绍适配器模 式 (Adapter 将 某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器。(就像手机要充电,不同的手机需要不同的电压,所以充电器就会转换手机所要充电的电压)适配器模式属于结构型模式主要分为三类:类适配器模式、对象适配器模式、接口适配器模式工作原理适配器模式:将一个类的接口转换成另一种接口 让 原本接口不兼容的类可以兼原创 2020-10-18 22:06:37 · 122 阅读 · 0 评论 -
设计模式学习(四)建造者模式
目录提出需求传统方式解决代码实现传统方式分析建造者模式提出需求需要建房子:这一过程为打桩、砌墙、封 顶房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的传统方式解决代码实现建一个抽象类//抽象类public abstract class AbstractHouse { //打地基 public abstract void buildBasic(); //做墙 public abstract void buildWall(); //原创 2020-09-20 21:37:22 · 328 阅读 · 0 评论 -
设计模式学习(四)原型模式
目录前言传统式方式解决原型模式深入讨论 浅拷贝和深拷贝浅拷贝深拷贝原型模式小结前言有一个问题引发了原型模式:现在有一只羊tom 姓 名为 : tom, 年龄为: 1 颜 色为:白色,请编写程序创建和 tom羊属性完全相同的 10 只羊 。羊的代码:public class sheep { private String name; private int age; private String color; public sheep(String name, int age, String原创 2020-08-20 10:43:23 · 157 阅读 · 0 评论 -
设计模式学习(三)工厂模式
目录简单工厂模式传统方式改进传统方式:简单工厂模式简单工厂模式传统方式通过一个传统的项目来介绍工厂模式:看一个包子的项目:要便于包子种类的扩展,要便于维护,需求如下:包子的种类很多 比如肉包子,菜包子等包子的制作有 prepare,baopi, fangruxianliao, cooking完成包子店订购功能。代码如下:包子铺public class baoziStore { public static void main(String[] args) { // TO原创 2020-08-19 11:31:41 · 224 阅读 · 0 评论 -
设计模式学习(二)单例设计模式
目录单例模式介绍单例模式的实现方式饿汉式-静态常量饿汉式-静态代码块懒汉式-线程不安全懒汉式-线程安全,同步方法懒汉式-线程安全,同步代码块双重检查静态内部类枚举单例模式注意事项和细节说明单例模式介绍所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例 ,并且该类只提供一个取得其对象实例的方法静态方法 。单例模式的实现方式饿汉式-静态常量饿汉式-静态代码块懒汉式-线程不安全懒汉式-线程安全,同步方法懒汉式-线程安全,同步代码块双重检查静态内部原创 2020-08-17 16:05:07 · 300 阅读 · 0 评论 -
设计模式学习(一):七大原则
目录设计模式的目的设计模式的七大原则单一职责原则接口隔离原则设计模式的目的编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序软件具有更好特性:代码重用性:相同功能的代码,不用多次编写可读性:编程规范性 , 便于其他程序员的阅读和理解可扩展性:当需要增加新的功能时,非常的方便,称为可维护可靠性:当我们增加新的功能后,对原来的功能没有影响使程序呈现高内聚低耦合的特性设计模式的七大原则单一职责原则接口隔离原则原创 2020-08-16 09:53:06 · 104 阅读 · 0 评论 -
代理模式简单基础
代理模式介绍23种常用的面向对象软件的设计模式之一为目标对象提供另外一种访问方式,通过访问代理对象来间接访问目标对象。优点:(1).职责清晰真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。(2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。(3).高扩展性结构:...原创 2020-04-02 11:26:21 · 92 阅读 · 0 评论 -
单例设计模式
单例设计模式概述单例设计模式:保证类在内存中只有一个对象。并提供一个访问它的全局访问点。如何保证类在内存中只有一个对象呢?控制类的创建,不让其他类来创建本类的对象。private在本类中定义一个本类的对象。Singleton s;提供公共的访问方式。 public static Singleton getInstance(){return s}单例模式解决的问题:可以保证一个类在内存中的对象的唯一性。必须对于多个程序使用同一个配置信息对象时,就必须保证对象的唯一性。注意事项:不要原创 2020-06-02 09:23:30 · 247 阅读 · 0 评论