
设计模式
文章平均质量分 73
勤径苦舟
书山有路勤为径,学海无涯苦作舟。只技术分享,非商业行为,我很少看消息,所以你们给我发的消息回的很少。
邮件:[email protected]
微信:zhou920786312
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式--01--6原则
一、单一职责原则1.1 优点降低类的复杂度,一个类只负责一项职责。提高类的可读性,可维护性降低变更引起的风险。1.2 违背单一职责原则情况只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,才可以在方法级别违反单一职责原则。1.3 什么是单一职责针对类,一个类应该只负责一项职责。假设类T负责两个不同职责:P1,P2,当职责P1需求变更而改变T时,可能造成职责P2发生故障,所以需要将类T的粒度分解为T1,T2。示例如下:package com.e原创 2020-07-14 15:07:27 · 315 阅读 · 1 评论 -
责任链模式
一、介绍为请求创建了一个接收者对象的链。 请求的发送者和接收者进行解耦。 每个接收者都有下一个接收者的节点。如果当前节点处理不了,就让下一个节点处理,依此类推。 使用场景 在处理消息的时候可以过滤很多道。 Struts2 的拦截器 优点: 它将请求的发送者和接收者解耦 简化了对象。使得对象不需要知道链的结构 增强给对象指派职责的灵活性 通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任 增加新的请求处理类很方便 缺点: 不能保证请求一定被接收.原创 2020-07-10 21:27:43 · 170 阅读 · 0 评论 -
桥接模式Bridge
一、介绍将抽象部分与实现部分分离,使它们都可以独立的变化。 通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。 注意事项:对于两个独立变化的维度,使用桥接模式再适合不过了。二、主要解决在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。三、何时使用实现系统可能有多个角度分类,每一种角度都可能变化。四、如何解决把这种多...原创 2020-12-01 18:01:14 · 238 阅读 · 3 评论 -
建造者模式(Builder Pattern)
一、介绍使用多个简单的对象一步一步构建成一个复杂的对象 一个 Builder 类会一步一步构造最终的对象。 该 Builder 类是独立于其他对象的。 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系。 与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。二、解决问题解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对原创 2020-07-06 20:39:39 · 204 阅读 · 0 评论 -
访问者模式
一、介绍有一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。 主要将数据结构与数据操作分离 主要解决稳定的数据结构和易变的操作耦合问题二、何时使用需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,使用访问者模式将这些封装到类中。三、如何解决在被访问的类里面加一个对外提供接待访问者的接口。四、应用实例您在朋友家做客,您是访问者,朋友接受您的访问,您通过朋友的描述...原创 2020-07-05 23:58:34 · 225 阅读 · 0 评论 -
原型模式
一、介绍用于创建重复的对象,同时又能保证性能。 该模式是实现了一个原型接口,该接口用于创建当前对象的克隆。利用已有的一个原型对象,快速地生成和原型对象一样的实例。 当直接创建对象的代价比较大时,则采用这种模式。案例如下 一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。 解决在运行期建立对象消耗性能的问题。 应用实例: JAVA 中的 Object clone() 方法。 二、做法.原创 2020-07-05 17:39:23 · 141 阅读 · 0 评论 -
中介者模式
一、介绍用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。 用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 解决问题 对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂 若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。 多个类相互耦合,形成了网状结构。 使原创 2020-07-05 17:01:46 · 163 阅读 · 0 评论 -
解释器模式
一、定义给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。 实现了一个表达式接口,该接口解释一个特定的上下文。 二、 何时使用如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。三、如何解决构建语法树,定义终结符与非终结符。四、应用实例编译器、运算表达式计算。SQL 解析、符号处理引擎五、优缺...原创 2020-07-05 16:35:47 · 154 阅读 · 0 评论 -
享元模式
一 、介绍(类图)用于减少创建对象的数量,以减少内存占用和提高性能尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。二、何时使用:系统中有大量相似对象, 这些对象消耗大量内存。 这些对象的状态大部分可以外部化。 这些对象可以按照内蕴状态分为很多组,当把外蕴对象从对象中剔除出来时,每一组对象都可以用一个对象来代替。 系统不依赖于这些对象身份,这些对象是不可分辨的。三、应用实例JAVA中的String类型,如果有则返回,如果没有则创建一个字符串保存...原创 2020-07-05 15:30:19 · 167 阅读 · 0 评论 -
备忘录模式
一、介绍保存一个对象的某个状态,以便在某个时刻恢复对象的状态。 针对的是对象状态的恢复 使用场景如下 数据库事务的回滚 游戏的存档 撤销或者回退动作 优缺点 优点: 给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。 实现了信息的封装,使得用户不需要关心状态的保存细节。 缺点: 消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。 二、代码//存储备份对...原创 2020-07-05 15:01:21 · 141 阅读 · 0 评论 -
外观模式
1可以理解成一个适配器包装多个适配者2:打个比方说:电脑开机:里面有加载驱动接口,加载启动项接口,加载....接口,反正开机是一个很复杂的过程,而外观模式就是告诉你,不要去管那些复杂的东西,你只要找到按下电源就是开机就好了.。3:定义:提供一个统一的接口,用来访问子系统的一群接口,类似于宏命令。4涉及原则最少知识原则(迪米特法则):只和你的密友交流,意思就是减少类之间的依赖...原创 2018-10-10 18:39:07 · 744 阅读 · 0 评论 -
装饰者模式
1涉及原则开发-关闭原则:类对扩展开发对修改关闭2装饰者和被装饰者有相同的超类型3可以有多个装饰者包装一个对象4在任何需要原始对象(被包装的)的场合,可以用装饰过的对象来代替5装饰者可以在被装饰者行为之前或之后,加上自己的 行为6对象可以在任何时候被装饰,比如运行时7动态的将责任附加到对象上,如果要扩展功能,装饰者提供了比继承更有弹性的替换方案。8会产生了很多的装饰者小类,让程序变...原创 2018-10-05 21:35:53 · 311 阅读 · 0 评论 -
观察者模式
1可以任意添加观察者,只要注册就会发信息给观察者2观察者模式就是出版者与订阅者的关系3对象是1对多的依赖,当主题改变状态时,所有观察者都会收到通知并自动更新4涉及的原则交互对象松耦合,主题不知道观察者的细节,只知道观察者实现了观察者接口对扩展开发,对修改关闭5观察者模式有推(demo1)和拉(demo2)2种模式demo1/** * * @a...原创 2018-10-05 21:47:46 · 289 阅读 · 0 评论 -
模板方法模式
定义1定义算法的步骤,允许子类为一个或多个步骤提供实现。2模板方法模式:在一个final方法中,定义一个算法的骨架,而将一些步骤延迟到子类中。使得子类在不改变算法结构的情况下,定义算法中的某些步骤。3个人理解:一个final方法M,里面包含几个抽象方法A,B,C,该抽象方法让子类继承。方法M是算法的模板,A,B,C是算法的步骤,步骤的具体实现由子类提供。 钩子定义在抽象...原创 2018-10-12 18:18:05 · 241 阅读 · 0 评论 -
迭代器模式
迭代器模式1将对象集合以迭代器的方式遍历输出(将遍历聚合的工作封装一个对象内),提供一个变量对象的通用接口2定义:提供一种方法顺序范围一个聚会对象的各个元素,而又不暴露内部实现3多态的设计思想,因为聚合对象是数组,是arrayList等,但是他们有个公共接口iterator4对迭代器来说,数据结构可以是有序的,无序的,重复的5空迭代器6涉及原则单一原则:一个类一个原...原创 2018-10-12 23:37:48 · 194 阅读 · 0 评论 -
组合模式
组合模式 1树结构 2:对象组合成树结构来表现整体/部分层数结构,让客户一致的方式处理个别对象和对象组合组合:包含组件,也就是当前节点的所有子节点,包括当前节点组件:包括组合和叶子节点3:允许客户对个别对象(叶子节点)以及组合对象(非叶子节点)一视同仁3图 案例遍历菜单 代码public abstract class MenuC...原创 2018-10-12 23:38:42 · 193 阅读 · 0 评论 -
状态模式
1通过状态来控制行为(方法)2一个状态一个行为(方法)3每个状态对应每个状态类,该类负责对应状态的行为4定义:允许对象在内部状态改变时,同时改变它的行为,对象看起来好像修改了他的类5允许context随着状态的改变而改变行为,状态转换可以由context或者state来控制6缺点:使设计类的数目变多7状态类可以由多个context共享8:context执行handle方...原创 2018-10-13 02:29:15 · 506 阅读 · 0 评论 -
工厂模式
涉及的原则:1依赖倒置原则:要依赖抽象,不要依赖具体类 2工厂模式理解:实现松耦合不管简单工厂,工厂,还是抽象工厂,本质都是负责具体实力的创建如果把抽象工厂或者工厂的区域原料或者区域工厂抽出来,都是简单工厂模式工厂方法:使用继承把对象的创建委托给子类抽象工厂:使用对象组合,对象的创建被实现在工厂接口或者暴露出来的方法中 1简单工厂模式 ...原创 2018-10-07 16:22:01 · 298 阅读 · 0 评论 -
单例模式
单例模式:保证类在内存中只有一个对象。、 饿汉式:类一加载就创建对象 懒汉式:用的时候,才去创建对象public class Single { private Single() {};//构造私有,防止开发者实例化类Single,创建出新的single //饿汉式:类一加载就创建对象 类成员变量私有,使成员变量不能直接修改这个值,只能通过public 方法访问 privat原创 2017-04-07 03:24:50 · 377 阅读 · 0 评论 -
代理模式
1定义为另一个对象对象提供替身或者占位符以控制对这个对象的访问2代理类控制和管理访问,一个类代表另一个类的功能3 增加设计类的数目,结构类似装饰者,但目的不同 远程代理RMI(远程对象的本地代表)1存在在客户端和真实服务端之间的访问层就是代理RMI远程调用步骤:1,客户调用客户端辅助对象stub上的方法2,客户端辅助对象stub打包调用信息(变量,...原创 2018-10-14 23:47:35 · 271 阅读 · 0 评论 -
复合模式
定义:多个模式一起工作代码工厂/** * * @author feizhou * 描述:抽象工厂 */public abstract class AbstractDuckFactory { public abstract Quackable createMallardDuck(); public abstract Quac...原创 2018-10-15 11:13:53 · 271 阅读 · 0 评论 -
命令模式
命令模式:将请求封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象,支持可撤销的操作适用场景:1. 命令的发送者和命令执行者有不同的生命周期。命令发送了并不是立即执行。2. 命令需要进行各种管理逻辑。3. 需要支持撤消\重做操作4日志(出错回滚)或者事务系统(回滚),队列请求(执行队列命令)重点 通过对上面的分析我们可以知道如下几点:1. 命令请求者和...原创 2018-10-11 22:55:21 · 169 阅读 · 0 评论 -
适配器模式
适配器:1将B看起来更像A,本质还是B2适配器要做的工作和目的接口大小成正比3可以将一个适配器包装多个适配者(外观模式)4定义:将一个或者多个类的接口转换成客户期望的另外一个接口。解决客户不兼容的问题,让客户从实现接口中解耦5适合场景:1当系统有新的接口,又要考虑旧有接口时候原理对象适配器好处:适配者的子类都可以搭配适配器使用1使用组...原创 2018-10-10 16:13:52 · 366 阅读 · 0 评论 -
策略模式
策略模式理解:1可以在运行中修改行为2父类的行为不是通过继承或者实现接口来,而是通过组合来,这里设置为设置为有一个飞行的行为和有一个叫的行为3鸭子的里面的飞行方法为什么调用飞行接口,是因为一旦鸭子的方法写死了的话,子类继承就有很多问题;比如说有些鸭子会飞有些不会飞,如果是不能飞;比如说:不能运行时修改行为比如说:假如修改飞行行为,所有子类的行为都修改了,这就不合理了比如说:很难...原创 2018-10-04 17:45:28 · 285 阅读 · 0 评论