![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
烟草的香味.
这个作者很懒,什么都没留下…
展开
-
6大设计原则之单一职责原则
单一职责原则如果有一个用户管理类,类图如下我想,任谁也能看的出这个接口设计的有问题,用户的属性和用户的行为没有分开,应该把用户的信息抽取成一个业务对象,把用户的行为抽取成一个业务对象,按照这个思路对类图进行修正,如下图所示其实,在实际使用中我们更倾向于使用两个不同的接口: 一个IUserBO,一个IUserBiz单一职责原则定义应该有且仅有一个原因引起类的变...原创 2019-05-09 21:57:32 · 131 阅读 · 0 评论 -
23种设计模式之适配器模式
适配器模式的定义定义: 将一个类的接口变换成客户端所期待的另一种接口, 从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作.通俗的说, 就是有 A、B两个接口,现在要求把A和B安装在一起使用, 两者的接口不一致, 怎么办? 引入一个物体C, 如下图:引入C物体后, C适应了A的接口, 同时也适应了B的接口, 三者就可以进行组合了其中的C物...原创 2019-05-12 17:28:53 · 106 阅读 · 0 评论 -
23种设计模式之组合模式
组合模式的定义定义: 将对象组合成树形结构以表示 "部分-整体" 的层次结构,使得用户对单个对象和组合对象的使用具有一致性.通俗的说, 就是实现了树形结构通用类图如下:其中的三个角色如下:Component 抽象构件角色: 定义参加组合对象的共有方法和属性, 可以定义一些默认的行为或属性 Aggregate 树枝构件: 组合树枝节点和叶子节点形成一个树形结构 Le...原创 2019-05-12 17:28:59 · 160 阅读 · 0 评论 -
23种设计模式之观察者模式
观察者模式的定义定义: 定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新通俗的说, 就是一个类的某个条件满足时, 会调用一系列定义好的方法其类图如下:其中的4个角色:Subject 被观察者: 定义被观察者必须实现的职责, 它必须能够动态的增加、取消被观察者. 它一般是抽象类或者实现类, 仅仅完成作为被观察者必须实...原创 2019-05-12 17:29:05 · 66 阅读 · 0 评论 -
23种设计模式之访问者模式
访问者模式的定义定义: 封装一些作用于某种数据结构中的各元素的操作, 它可以在不改变数据结构的前提下定义作用于这些元素的新的操作通俗的说, 就是定义一个访问者角色, 当对指定角色进行访问时要通过访问者进行访问其类图如下:各角色说明:Vistor 抽象访问者: 抽象类或接口, 声明访问者可以访问哪些元素, 具体到程序中就是 visit 方法的参数定义哪些对象是可以被访问...原创 2019-05-13 22:55:48 · 84 阅读 · 0 评论 -
23种设计模式之备忘录模式
备忘录模式的定义定义: 在不破坏封装性的前提下, 捕获一个对象的内部状态, 并在该对象之外保存这个状态. 这样以后就可将该对象回复到原先保存的状态通俗的说, 就是记录下类的当前状态, 当需要的时候恢复类图如下:其中各角色如下:Originator 发起人角色: 记录当前时刻的内部状态, 负责定义哪些属于备份范围的状态, 负责创建和恢复备忘录数据 Memento 备忘...原创 2019-05-13 22:55:57 · 425 阅读 · 0 评论 -
23种设计模式之解释器模式
解释器模式的定义定义: 给定一门语言,定义它的文法的一种表示, 并定义一个解释器, 该解释器使用该表示来解释语言中的句子.其类图如下:其中的角色说明:AbstractExpression 抽象解释器: 具体的解释任务由各个实现类完成 TerminalExpression 终结符表达式: 实现与文法中的元素相关联的解释操作, 通常一个解释器模式中只有一个终结符表达式, 但...原创 2019-05-13 22:55:52 · 71 阅读 · 0 评论 -
23种设计模式之状态模式
状态模式的定义定义: 当一个对象内在状态改变时允许其改变行为, 这个对象看起来像改变了其类通俗的说, 就是一个事物有不同的状态,在不同状态下执行各个方法时有不同的表现, 将每个状态都封装成一个类, 然后通过上下文对象统一管理其类图如下:其中的三个角色如下:State 抽象状态角色: 接口或抽象类, 负责对象状态定义, 并且封装环境角色以实现状态切换 Concrete...原创 2019-05-13 22:56:02 · 73 阅读 · 0 评论 -
23种设计模式之桥梁模式
桥梁模式的定义定义: 将抽象和实现解耦, 使得两者可以独立的变化通俗的说, 就是一个类调用另一个类中的方法, 需要一个桥梁, 通过聚合的关系调用其类图如下:其中角色说明如下:Abstraction 抽象化角色: 它的主要职责是定义出该角色的行为, 同时保存一个对实现化角色的引用, 一般是抽象类 Implementor 实现化角色: 接口或抽象类, 定义角色必须的行为...原创 2019-05-13 22:56:06 · 123 阅读 · 0 评论 -
23种设计模式之享元模式
享元模式的定义定义: 使用共享对象可有效的支持大量的细粒度的对象通俗的说, 就是将类的通用属性抽出来,建立对象池,以达到限制对象数量的效果上面定义中要求细粒度对象, 那么不可避免的使得对象数量多且性质相近, 我们将这些对象的信息分为两个部分: 内部状态和外部状态内部状态是对象可以共享出来的信息, 存储在享元对象内部并且不会随环境改变而改变. 如一个报考系统中的个人信息. 外部状态...原创 2019-05-13 22:56:11 · 81 阅读 · 0 评论 -
设计模式之结构类模式PK
结构类模式包括:适配器模式 桥梁模式 组合模式 装饰模式 门面模式 享元模式 代理模式结构类模式着重于如何建立一个软件结构为什么叫结构类模式呢? 因为他们都是通过组合类或对象产生更大结构以适应更高层次的逻辑需求.结构型模式是为解决怎样组装现有的类,设计他们的交互方式,从而达到实现一定的功能的目的。代理模式VS装饰模式首先,装饰模式就是代理模式的一个特殊应用,两者的...原创 2019-05-13 22:56:19 · 77 阅读 · 0 评论 -
设计模式之创建类模式PK
创建类模式包括:工厂方法模式 建造者模式 抽象工厂模式 单例模式 原型模式创建类模式能够提供对象的创建和管理职责.其中单例模式和原型模式非常容易理解, 单例模式是要保持在内存中只有一个对象,原型模式是要求通过复制的方式产生一个新的对象,这两个不容易混淆.工厂方法模式VS建造者模式工厂方法模式注重的是整体对象的创建方法,而建造者模式注重的是部件构建的过程,旨在通过一步一步的...原创 2019-05-13 22:56:15 · 66 阅读 · 0 评论 -
设计模式之规格模式
规格模式规格模式 使用了策略模式,组合模式. 只不过将模式具体化了规格模式将 与或非 操作进行了封装, 实现了类似 SQL查询语句的操作.类图如下:其中的角色如下:ISpecification 抽象规格书: 对规格书的抽象定义 CompositeSpecification 组合规格书: 抽象类, 对规格书进行 与或非 操作, 实现 and,or,not 方法, 在方...原创 2019-05-13 22:56:36 · 157 阅读 · 0 评论 -
设计模式之行为类模式PK
行为类模式包括:责任链模式 命令模式 解释器模式 迭代器模式 中介者模式 备忘录模式 观察者模式 状态模式 策略模式 模板方法模式 访问者模式行为型模式涉及到算法和对象间职责的分配行为类模式关注如何管理对象的行为.命令模式VS策略模式策略模式和命令模式相似, 特别是命令模式退化时,比如无接收者(接收者非常简单或者接收者是Java的基础操作,无需专门写一个接收者...原创 2019-05-13 22:56:32 · 70 阅读 · 0 评论 -
设计模式之雇工模式
雇工模式雇工模式也叫仆人模式, 其意图为: 雇工模式是行为模式的一种, 它为一组类提供通用的功能,而不需要类实现这些功能,它是命令模式的一种扩展.其类图如下:其中角色如下:IServiced : 用于定义服务内容的接口 Serviced1 : 具体的服务提供者 Servant : 执行者,即雇工类, 用于执行服务IServiced 代码如下:Servi...原创 2019-05-14 22:39:56 · 91 阅读 · 0 评论 -
设计模式之对象池模式
对象池模式对象池模式, 或者称为对象池服务, 其意图为: 通过循环使用对象, 减少资源在初始化和释放时的昂贵损耗(这里的"昂贵"可能是时间效益(如性能), 也可能是空间效益(如并行处理), 在大多情况下, 指性能)简单的说, 在需要时,从池中提取,不用时,放回池中,等待下一个请求. 典型的例子是连接池和线程池.类图如下:其中角色如下:ObjectPool 对象池角色:...原创 2019-05-14 22:40:02 · 100 阅读 · 0 评论 -
设计模式之黑板模式
黑板模式的意图黑板模式是观察者模式的一个扩展,知名度并不高,但使用的范围却非常广. 其意图为: 允许消息的读写同时进行, 广泛的交互消息.简单的说, 黑板模式允许多个消息读写者同时存在, 消息的生产者和消费者完全分开. 这就像一个黑板, 任何一个老师(消息的生产者)都可以在上面书写消息, 任何一个学生(消息的消费者)都可以从黑板上读取消息, 两者在空间和时间上可以解耦, 互不干扰.示意...原创 2019-05-14 22:40:06 · 1011 阅读 · 0 评论 -
23种设计模式之迭代器模式
迭代器模式的定义定义: 它提供一种方法访问一个容器对象中各个元素, 而又不需暴露该对象的内部细节其类图如下:其中角色:Iterator 抽象迭代器: 抽象迭代器负责定义访问和遍历元素的接口, 而且基本上是有固定的三个方法: first()获得第一个元素, next()访问下一个元素, isDone() 是否已经访问到末尾 ConcreteIteraor 具体迭代器: 实...原创 2019-05-12 17:28:48 · 40 阅读 · 0 评论 -
23种设计模式之门面模式
门面模式的定义定义: 要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行. 门面模式提供一个高层次的接口, 使得子系统更易于使用.通俗的说, 就是设计一个类,专门用于对外服务的, 门面对象是外界访问子系统内部的唯一通道其类图如下:其中两个角色如下:Facade 门面角色: 客户端可以调用这个角色的方法. 此角色知晓子系统的所有功能和责任. 一般情况下, 本角...原创 2019-05-12 17:28:41 · 78 阅读 · 0 评论 -
23种设计模式之策略模式
策略模式的定义定义: 定义一组算法, 将每个算法都封装起来, 并且使它们之间可以互换通俗的说, 就是对一个接口下的一组算法进行封装其类图如下:其中三个角色说明:Strategy 抽象策略角色: 策略、算法家族的抽象, 通常为接口, 定义每个策略或算法必须具有的方法和属性 ConcreteStrategy 具体策略角色: 实现抽象策略中的操作, 该类含有具体的算法....原创 2019-05-12 17:28:34 · 91 阅读 · 0 评论 -
6大设计原则之里氏替换原则
面对对象中的继承优点如下:代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性 提高代码的重用性 子类可以形如父类,但又异于父类 提高代码的可扩展性,很多开源框架的扩展接口都是通过继承父类来实现的 提高产品或项目的开放性缺点如下:继承是侵入性的.只要继承,就必须拥有父类的所有属性和方法 降低代码的灵活性.子类必须拥有父类的属性和方法,让子类自由的世界中多了些约束 ...原创 2019-05-09 22:00:43 · 171 阅读 · 0 评论 -
6大设计原则之依赖倒置原则
依赖倒置原则的定义依赖倒置原则的原始定义如下:High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon ab...原创 2019-05-09 22:01:04 · 68 阅读 · 0 评论 -
6大设计原则之接口隔离原则
接口隔离原则的定义什么是接口.实例接口,比如定义了一个Person类,然后 Person p = new Pserson(); 产生一个实例,Person类就是 p 的接口 类接口,就是Java中使用 interface 定义的接口什么是隔离隔离要求将接口尽量细化,同时接口中的方法尽量少.接口隔离原则的实现比如现在有一个人,他身兼数职,是一个老师,要教书,是一个学生,要学习...原创 2019-05-10 22:39:17 · 97 阅读 · 0 评论 -
6大设计原则之迪米特法则
迪米特法则的定义迪米特法则也称为最少知识原则,一个对象应该对其他对象有最少的了解. 通俗的讲,一个类应该对自己需要耦合或调用的类知道的最少,被调用类的内部是如何复杂都和我没关系,我就知道你的这些public方法,我就调用这么多,其他的我一概不关心.迪米特法则对类的低耦合提出了要求1.只和朋友交流什么是朋友呢?出现在成员变量、方法的输入输出参数中的类称为朋友类,而出现在方法体内部...原创 2019-05-10 22:39:23 · 67 阅读 · 0 评论 -
6大设计原则之开闭原则
开闭原则的定义开闭原则的定义: 一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭.即一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化.软件实体包括一下部分项目或软件产品中按照一定的逻辑规则划分的模块 抽象和类 方法注意: 开闭原则对扩展开放,对修改关闭,并不意味着不做任何修改,底层模块的变更,必然要有高层模块进行耦合,否则就是一个孤立无意义的代码片段...原创 2019-05-10 22:45:28 · 97 阅读 · 0 评论 -
23种设计模式之单例模式
单例模式的定义定义: 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.单例模式的通用类图如下:单例模式的优缺点单例模式的优点:由于单例模式在内存中只有一个实例,减少了内存开支,特别是一个对象需要频繁的创建、销毁时,而且创建和销毁时性能又无法优化,单例模式的优势就非常明显 由于单例模式只生成一个实例,所以减少了系统的性能开销,当一个对象的产生需要比较...原创 2019-05-10 22:45:35 · 82 阅读 · 0 评论 -
23种设计模式之工厂方法模式
工厂方法模式的定义定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类. 工厂方法使一个类的实例化延迟到其子类工厂方法模式的通用类图:其中 Product 负责产品的共性,实现对事物最抽象的定义; Creator 为抽象创建类, 也就是抽象工厂, 具体如何创建产品类是由具体的实现工厂 ConcreteCreator 完成的. 下面给出他们的代码:产品抽象类代码:...原创 2019-05-10 22:45:43 · 160 阅读 · 0 评论 -
23中设计模式之抽象工厂模式
抽象工厂模式的定义定义: 为创建一组相关或互相依赖的对象提供一个接口,而且无须制定它们的具体类抽象工厂模式的实现两个产品族, 其类图如下:抽象产品类代码如下:产品A的1级和2级类代码如下:产品B与产品A类似抽象工厂类 AbstractCreator 的职责是定义 每个工厂要实现的功能,其代码如下:如何创建产品,则是由具体的实现...原创 2019-05-10 22:45:48 · 90 阅读 · 0 评论 -
23种设计模式之建造者模式
建造者模式的定义建造者模式也叫生成器模式, 定义如下:将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示类图如下:在建造者模式中, 四个角色如下:Product 产品类: 通常是实现了模板方法模式, 也就是有模板方法和基本方法 Builder 抽象建造者: 规范产品的组建, 一般是由子类实现 ConcreteBuilder 具体建造者: 实...原创 2019-05-10 22:45:59 · 85 阅读 · 0 评论 -
23种设计模式之模板方法模式
模板方法模式的定义定义一个操作中的算法的框架,而将一些步骤延迟到子类中. 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤.通俗的讲,就是将子类相同的方法, 都放到其抽象父类中类图如下:其中, AbstractClass 叫抽象模板, 它的方法分为以下两类:基本方法, 基本方法也叫做基本操作, 是由子类实现的方法, 并且在模板方法被调用 模板方法, 可...原创 2019-05-10 22:45:53 · 92 阅读 · 0 评论 -
23种设计模式之原型模式
原型模式的定义定义: 用原型实例指定创建对象的种类, 并且通过拷贝这些原型创建新的对象.通俗的讲,就是不再使用new 来创建对象, 而改用 clone 方法来得到新的对象原型模式的核心是一个 clone 方法, 通过该方法进行对象的拷贝, Java提供了一个Cloneable接口来标识这个对象是可拷贝的,为什么说是"标识" 呢? 翻开JDK的帮助看Cloneable是一个方法都没有的,...原创 2019-05-10 22:46:04 · 65 阅读 · 0 评论 -
23种设计模式之代理模式
代理模式的定义代理模式是一个使用率非常高的模式,其定义为: 为其他对象提供一种代理以控制对这个对象的访问代理模式也叫做委托模式, 它是一项基本设计技巧. 许多其他的模式, 如状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式, 而且在日常的应用中, 代理模式可以提供非常好的访问控制.代理模式的通用类图如下:图中三个角色的定义:Subject抽象主题角色...原创 2019-05-10 22:46:09 · 130 阅读 · 0 评论 -
23种设计模式之中介者模式
中介者模式的定义中介者模式, 当多个类彼此关联, 会增大耦合性, 这时各个模块通过中介者进行交流, 每个模块只负责自己的业务逻辑, 不属于自己的就丢给中介者, 降低耦合定义: 用一个中介对象封装一系列的对象交互, 中介者使各对象不需要显示的相互作用,从而使其耦合松散,而且可以独立的改变他们之间的交互.通用类图如下:由以下几部分组成:AbstractMediator 抽...原创 2019-05-12 17:28:04 · 97 阅读 · 0 评论 -
23种设计模式之责任链模式
责任链模式的定义定义: 使多个对象都有机会处理请求, 从而避免了请求的发送者和接受者之间的耦合关系. 将这些对象连成一条链, 并沿着这条链传递该请求,直到有对象处理它为止通俗的讲, 就是将对请求的处理组成一条链, 当请求来时, 在链中依次传递, 知道找到能够处理此请求的对象其通用类图如下:责任链模式的重点是 在"链"上, "链"由多个处理者 ConcreteHandler...原创 2019-05-12 17:28:16 · 66 阅读 · 0 评论 -
23种设计模式之命令模式
命令模式的定义定义: 将一个请求封装成一个对象, 从而让你使用不同的请求将客户端参数化, 对请求排队或者记录请求日志, 可以提供命令的撤销和恢复功能通俗的说, 就是当有不同的请求时, 将每一种请求都封装成一个对象, 不同的请求调用不同的执行者来执行命令模式的通用类图如下:其中各部分如下:Receiver 接收者. 就是干活的角色, 命令传递到这里是应该被执行的, 每一...原创 2019-05-12 17:28:11 · 71 阅读 · 0 评论 -
23种设计模式之装饰模式
装饰模式的定义定义: 动态的给一个对象添加一些额外的职责. 就增加功能来说, 装饰模式相比生成子类更为灵活.通俗的说, 就是对一个类或方法进行包装装饰模式的通用类图:类图中的四个角色说明如下:Component 抽象构件: Component是一个接口或抽象类, 就是定义我们最核心的角色, 也就是最原始的对象. 在装饰模式中, 必然有一个最基本、最核心的接口或抽象类充...原创 2019-05-12 17:28:23 · 62 阅读 · 0 评论 -
设计模式之空对象模式
空对象模式空对象模式是通过实现一个默认的无意义对象来避免null值出现, 简单地说,就是为了避免在程序中出现null值判断而诞生的一种常用设计方法.举个简单的例子, 一个听动物叫声的模拟程序:动物代码:听叫声的人:现在我们想, 能不能把 animal 的空值判断去掉呢?我们增加一个 NullAnimal 类:增加了NullAnimal类后, 在...原创 2019-05-14 22:40:11 · 74 阅读 · 0 评论