
设计模式
文章平均质量分 89
码仙♥
一个人能做的至善之举,就是帮助另一个人知道得更多
展开
-
二十六、解释器模式
解释器模式0.码仙励志1.概述2.结构3.案例实现4.优缺点5.使用场景0.码仙励志不管做什么都不要急于回报,因为播种和收获不在同一个季节,中间隔着的一段时间,我们叫它为坚持。1.概述如上图,设计一个软件用来进行加减计算。我们第一想法就是使用工具类,提供对应的加法和减法的工具方法。//用于两个整数相加public static int add(int a,int b){ return a + b;}//用于两个整数相加public static int add(int a,in原创 2021-11-03 13:54:34 · 194 阅读 · 0 评论 -
二十五、备忘录模式
备忘录模式0.码仙励志1.概述2.结构3.案例实现3.1.“白箱”备忘录模式3.2.“黑箱”备忘录模式4.优缺点5.使用场景0.码仙励志让坚持成为一种信仰。1.概述备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原,很多软件都提供了撤销(Undo)操作,如 Word、记事本、Photoshop、IDEA等软件在编辑时按 Ctrl+Z 组合键时能撤销当前操作,使文档恢复到之前的状态;还有在 浏览器 中的原创 2021-11-03 13:42:24 · 256 阅读 · 0 评论 -
二十四、访问者模式
访问者模式0.码仙励志1.概述2.结构3.案例实现4.优缺点5.使用场景6.扩展0.码仙励志任何的限制,都是从自己的内心开始的。1.概述定义:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。2.结构访问者模式包含以下主要角色:抽象访问者(Visitor)角色:定义了对每一个元素(Element)访问的行为,它的参数就是可以访问的元素,它的方法个数理论上来讲与元素类个数(Element的实现类个数)是一样的,从这点不难看出,访问者模原创 2021-11-03 11:34:55 · 242 阅读 · 0 评论 -
二十三、迭代器模式
迭代器模式0.码仙励志1.概述2.结构3.案例实现4.优缺点5.使用场景6.JDK源码解析0.码仙励志一个人未来能去哪,不是靠想象,而是靠今天你都干了什么,干得怎么样。1.概述定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。2.结构迭代器模式主要包含以下角色:抽象聚合(Aggregate)角色:定义存储、添加、删除聚合元素以及创建迭代器对象的接口。具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。抽象原创 2021-11-03 11:28:33 · 191 阅读 · 0 评论 -
二十二、中介者模式
中介者模式0.码仙励志1.概述2.结构3.案例实现4.优缺点5.使用场景0.码仙励志别想一下造出大海,必须先由小河川开始。1.概述一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定。例如在下左图中,有六个同事类对象,假如对象1发生变化,那么将会有4个对象受到影响。如果对象2发生变化,那么将会有5个对象受到影响。也就是说,同事类之间直接关联的设计是不好的。如果引入中介者模式,那么同事类之间的关系将原创 2021-11-02 16:51:03 · 134 阅读 · 0 评论 -
二十一、观察者模式
观察者模式0.码仙励志1.概述2.结构3.案例实现4.优缺点5.使用场景6.JDK中提供的实现0.码仙励志熬那些很苦的日子一点都不难,因为我知道它会变好。1.概述定义:又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。2.结构在观察者模式中有如下角色:Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里原创 2021-11-02 16:18:19 · 236 阅读 · 0 评论 -
二十、状态模式
0.码仙励志成功的秘诀在于对目标的执着追求。1.概述【例】通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更新处理。例如,如果电梯门现在处于运行时状态,就不能进行开门操作,而如果电梯门是停止状态,就可以执行开门操作。类图如下:代码如下:public interface ILift { //电梯的4个状态 //开门状态 public final static int OPENING_STATE = 1原创 2021-10-17 15:11:17 · 83 阅读 · 0 评论 -
十九、责任链模式
0.码仙励志今日的我,比昨日更强。1.概述在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据自己要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这增加了难度。这样的例子还有很多,如找领导出差报销、生活中的“击鼓传花”游戏等。定义:又名职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通原创 2021-10-17 15:01:26 · 145 阅读 · 0 评论 -
十八、命令模式
这里写目录标题0.码仙励志1.概述2.结构3.案例实现4.优缺点5.使用场景6.JDK源码解析0.码仙励志1.概述日常生活中,我们出去吃饭都会遇到下面的场景。定义:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。2.结构命令模式包含以下主要角色:抽象命令类(Command)角色: 定义命令的接口,声明执行的方法。具体命令(Concrete Command)角色:具体的命令,实现命令原创 2021-10-16 21:09:01 · 133 阅读 · 0 评论 -
十七、策略模式
策略模式0.码仙励志1.概述2.结构3.案例实现4.优缺点5.使用场景6.JDK源码解析0.码仙励志人类因有梦想而伟大,行动是梦想的开端。1.概述先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有很多,可以选择Idea进行开发,也可以使用eclipse进行开发,也可以使用其他的一些开发工具。定义: 该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的原创 2021-10-16 20:50:11 · 134 阅读 · 0 评论 -
十六、模板方法模式
模板方法模式0.码仙励志1.概述2.结构3.案例实现4.优缺点5.适用场景6.JDK源码解析0.码仙励志孤独不是给别人机会来可怜你,而是给你机会发现更强大的自己。1.概述在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每原创 2021-10-16 20:41:56 · 97 阅读 · 0 评论 -
十五、享元模式
享元模式0.码仙励志1.概述2.结构3.案例实现4.优缺点和使用场景5.JDK源码解析0.码仙励志只要心里还存着不甘心,就还没到放弃的时候。1.概述定义: 运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销,从而提高系统资源的利用率。2.结构享元(Flyweight )模式中存在以下两种状态:内部状态,即不会随着环境的改变而改变的可共享部分。外部状态,指随环境改变而改变的不可以共享的部分。享元模式的实现要领就是区原创 2021-10-16 20:36:24 · 103 阅读 · 0 评论 -
十四、组合模式
组合模式0.码仙励志1.概述2.结构3.案例实现4.组合模式的分类5.优点6.使用场景0.码仙励志不是境况造就人,而是人造就境况。1.概述 对于这个图片肯定会非常熟悉,上图我们可以看做是一个文件系统,对于这样的结构我们称之为树形结构。在树形结构中可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可以对叶子节点进行相关的操作。可以将这颗树理解成一个大的容器,容器里面包含很多的成员对象,这些成员对象即可是容器对象也可以是叶子对象。但是由于容器对象和叶子对象在功能上面的区别,使得我们在使用原创 2021-10-16 20:28:31 · 99 阅读 · 0 评论 -
十三、外观模式
外观模式0.码仙励志1.概述2.结构3.案例4.使用场景5.源码解析0.码仙励志成功便是站起比倒下多一次。1.概述有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就有许多的基金,它将投资者分散的资金集中起来,交由专业的经理人进行管理,投资于股票、债券、外汇等领域,而基金投资的收益归持有者所有,管理机构收取一定比例的托管管理费用。定义: 又名门面模式,是一种通过为多个复原创 2021-10-16 16:00:12 · 133 阅读 · 0 评论 -
十二、桥接模式
桥接模式0.码仙励志1.概述2.结构3.案例4.使用场景0.码仙励志不管失败多少次,都要面对生活,充满希望。1.概述现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系:我们可以发现有很多的类,假如我们再增加一个形状或再增加一种颜色,就需要创建更多的类。试想,在一个有多种可能会变化的维度的系统中,用继承方式会造成类爆炸,扩展起来不灵活。每次在一个维度上新增一个具体实现都要增加多个子类。为了更加灵活的设计系统,我们此时可以考虑使用桥接模式。原创 2021-10-16 15:52:23 · 140 阅读 · 0 评论 -
十一、装饰者模式
装饰者模式0.码仙励志1.概述2.结构3.案例4.使用场景5.JDK源码解析6.代理和装饰者的区别0.码仙励志所谓梦想,是永不停息的疯狂。1.概述我们先来看一个快餐店的例子。快餐店有炒面、炒饭这些快餐,可以额外附加鸡蛋、火腿、培根这些配菜,当然加配菜需要额外加钱,每个配菜的价钱通常不太一样,那么计算总价就会显得比较麻烦。使用继承的方式存在的问题:扩展性不好如果要再加一种配料(火腿肠),我们就会发现需要给FriedRice和FriedNoodles分别定义一个子类。如果要新增一个快餐品类原创 2021-10-16 15:45:40 · 128 阅读 · 0 评论 -
十、适配器模式
适配器模式0.码仙励志1.概述2.结构3.类适配器模式4.对象适配器模式5.应用场景6.JDK源码解析0.码仙励志要有梦想,即使遥远。1.概述如果去欧洲国家去旅游的话,他们的插座如下图最左边,是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑,手机在当地不能直接充电。所以就需要一个插座转换器,转换器第1面插入当地的插座,第2面供我们充电,这样使得我们的插头在当地能使用。生活中这样的例子很多,手机充电器(将220v转换为5v的电压),读卡器等,其实就是使用到了适配器模式。定义:原创 2021-10-16 15:31:07 · 176 阅读 · 0 评论 -
九、代理模式
0.码仙励志我为你今天的表现感到骄傲。1.概述由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译期就生成,而动态代理代理类则是在Java运行时动态生成。动态代理又有JDK代理和CGLib代理两种。2.结构代理(Proxy)模式分为三种角色:抽象主题(Subject)类: 通过接口或抽象类声明真实主题和代理对象实现的原创 2021-10-16 15:20:29 · 136 阅读 · 0 评论 -
八、创建者模式对比
0.码仙励志今天的成就是昨天的努力。1.工厂方法模式VS建造者模式工厂方法模式注重的是整体对象的创建方式;而建造者模式注重的是部件构建的过程,意在通过一步一步地精确构造创建出一个复杂的对象。我们举个简单例子来说明两者的差异,如要制造一个超人,如果使用工厂方法模式,直接产生出来的就是一个力大无穷、能够飞翔、内裤外穿的超人;而如果使用建造者模式,则需要组装手、头、脚、躯干等部分,然后再把内裤外穿,于是一个超人就诞生了。2.抽象工厂模式VS建造者模式抽象工厂模式实现对产品家族的创建,一个产品家族是这样原创 2021-09-23 09:56:55 · 130 阅读 · 0 评论 -
七、建造者模式
建造者模式0.码仙励志1.概述2.结构3.实例4.优缺点5.使用场景6.模式扩展0.码仙励志与其降低你的开支,不如去尝试增加你的收入。这就是努力的理由。1.概述将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况。由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不原创 2021-09-23 09:45:27 · 194 阅读 · 0 评论 -
六、原型模式
原型模式0.码仙励志1.概述2.结构3.实现4.案例5.使用场景6.扩展(深克隆)0.码仙励志只有贡献,方可衡量人生的价值。1.概述用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。2.结构原型模式包含如下角色:抽象原型类:规定了具体原型对象必须实现的的 clone() 方法。具体原型类:实现抽象原型类的 clone() 方法,它是可被复制的对象。访问类:使用具体原型类中的 clone() 方法来复制新的对象。接口类图如下:3.实现原型模式的克隆原创 2021-09-05 18:54:54 · 140 阅读 · 0 评论 -
五、工厂模式
工厂模式0.码仙励志1.概述2.简单工厂模式2.1结构2.2实现2.3优缺点2.4扩展3.工厂方法模式3.1概念3.2结构3.3实现3.4优缺点4.抽象工厂模式4.1概念4.2结构4.3实现4.4优缺点4.5使用场景5.模式扩展6.JDK源码解析-Collection.iterator方法0.码仙励志每个不满意的此刻,都有个不努力的以前。1.概述需求:设计一个咖啡店点餐系统。设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee原创 2021-09-05 18:45:02 · 163 阅读 · 0 评论 -
四、单例设计模式
0.码仙励志学到很多东西的诀窍,就是一下子不要学很多。1.单例模式的概述单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。2.单例模式的结构单例模式的主要有以下角色:单例类。只能创建一个实例的类访问类。使用单例类3.单例模式的实现原创 2021-09-05 18:29:31 · 163 阅读 · 0 评论 -
三、软件设计原则
软件设计原则0.码仙励志1.软件设计原则概述2.开闭原则3.里氏代换原则4.依赖倒转原则5.接口隔离原则6.迪米特法则7.合成复用原则0.码仙励志不是境况造就人,而是人造就境况。1.软件设计原则概述在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。2.开闭原则对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好原创 2021-09-05 18:17:20 · 325 阅读 · 0 评论 -
二、UML图
UML图0.码仙励志1.UML图概述2.类图概述3.类图的作用4.类图表示法4.1类的表示方式4.2类与类之间关系的表示方式4.2.1 关联关系4.2.2 聚合关系4.2.3 组合关系4.2.4 依赖关系4.2.5 继承关系4.2.6 实现关系0.码仙励志别人的话只能作为一种参考,是不能左右自己的。1.UML图概述统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。UML 从目标系原创 2021-09-05 10:30:12 · 373 阅读 · 2 评论 -
一、设计模式概述
设计模式概述0.码仙励志1.软件设计模式的产生背景2.软件设计模式的概念3.学习设计模式的必要性4.设计模式分类0.码仙励志每一个不曾起舞的日子,都是对生命的辜负。1.软件设计模式的产生背景"设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造》中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻原创 2021-08-15 21:08:22 · 180 阅读 · 0 评论