设计模式
文章平均质量分 77
失业找工作中
it小白的学习笔记,加油!
展开
-
设计模式汇总
设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。设计原创 2019-01-14 00:09:10 · 292 阅读 · 0 评论 -
UML类图
UML基本介绍UML——Unified modeling language UML (统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果UML 本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等,如右图:UML 图画UML 图与写文章差不多,都是把自己的思想描述给别人看,关键在于思路和条理,UML 图分类:用例图(use case)原创 2021-08-17 14:45:56 · 192 阅读 · 0 评论 -
单一职责原则
什么是单一原则:就一个类而言,应该仅有一个引起它变化的原因,通俗的说,就是一个类只负责一项职责。问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,,由于类T承担的职责有多个(p1,p2),职责P1的变化有可能会导致原本运行正常的职责P2功能发生故障。解决方案:遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1...原创 2018-08-12 15:40:30 · 1919 阅读 · 1 评论 -
接口隔离原则
定义:客户端不应该依赖它不需要的接口; 一个类对另一个类的依赖应该建立在最小的接口上。问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。解决方案:将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。举例来说明接口隔离原则:(图1 未...原创 2018-08-12 16:10:38 · 1158 阅读 · 1 评论 -
依赖倒置原则
摘自设计模式之禅定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象; 抽象不应该依赖细节; 细节应该依赖抽象。依赖倒置原则在java中的表现就是模块间的依赖通过从抽象存在,实现类之间不存在直接的依赖关系,其依赖关系是通过接口或者抽象类产生的。 接口或抽象类不会依赖于实现类。 实现类依赖于接口或者抽象类。也就是我们所谓的“面向接口编程OOD(Object-Oriente...原创 2018-08-12 16:08:43 · 320 阅读 · 0 评论 -
里氏替换原则
定义摘自设计模式之禅定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。定义2:所有引用基类的地方必须能透明地使用其子类的对象。 显然,第二个定义更为清晰明了,简单来说,一个软件实体如果使用的是一...原创 2018-08-12 15:51:23 · 901 阅读 · 0 评论 -
开放封闭原则
定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。问题由来:在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。 实际上,变化或者可能的...原创 2018-08-12 16:31:17 · 1151 阅读 · 0 评论 -
迪米特法则
定义:一个对象应该对其他对象保持最少的了解。问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。解决方案:尽量降低类与类之间的耦合。 自从我们接触编程开始,就知道了软件编程的总的原则:低耦合,高内聚。无论是面向过程编程还是面向对象编程,只有使各个模块之间的耦合尽量的低,才能提高代码的复用率。低耦合的优点不言而喻,但是怎么样编程才能做...原创 2018-08-12 16:18:16 · 1812 阅读 · 0 评论 -
组合复用原则
一、什么是组合复用原则组合复用原则也叫合成/聚合复用原则(CARP),就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。这个原则的简短表述就是:要尽量使用组合,尽量不要使用继承。二、实现复用的两种方式在面向对象的设计里,有两种基本的方法可以在不同的环境中复用已有的设计和实现,即通过组合或通过继承。组合由于组合...原创 2018-08-12 16:33:24 · 3917 阅读 · 0 评论 -
设计模式之单例模式
单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在正整个程序空间中,该类只存在一个实例对象。在GOF对单例模式的定义就是:保证一个类只有一个实例存在,同时提供能对该实例加以访问的全局访问方法基本定义所谓单例模式就是确保某一个类只有一个实例,并且提供一个全局访问点。从上面可以看出单例模式有如下几个特点: 一、它只有一个实例。 二...原创 2019-01-10 19:47:41 · 137 阅读 · 0 评论 -
设计模式之简单工厂模式
在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的,但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象。 在这些情况,新对象的建立就是一个 “过程”,不仅是一个操作,像一部...原创 2019-01-09 20:25:07 · 251 阅读 · 0 评论 -
设计模式之工厂方法模式
工厂方法模式Factory Method,又称多态性工厂模式。在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。意图定义一个用户创建对象的接口,让子类决定实例化哪一个类,工厂方法模式使一个类的实例化延迟到其子类。参与者抽象产品角色(...原创 2019-01-09 21:07:39 · 183 阅读 · 0 评论 -
设计模式之抽象工厂模式
在工厂方法模式中,我们使用一个工厂创建一个产品,也就是说一个具体的工厂对应一个具体的产品。但是有时候我们需要一个工厂能够提供多个产品对象,而不是单一的对象,这个时候我们就需要使用抽象工厂模式。抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的,抽象工厂迷失可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。在讲解抽象工厂模式之前,...原创 2019-01-10 19:01:25 · 225 阅读 · 0 评论 -
设计模式之原型模式
原型模式是一种对象创建型模型,它采用复制原型对象的方法来创建对象的实例,具有与原型一样的数据。模式定义 所谓原型模式就是用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。 在原型模式中,所发动创建的对象通过请求原型对象来拷贝原型对象自己来实现创建过程,当然所发动创建的对象需要知道原型对象的类型。这里也就是说所发动创建的对象只需要知道原型对象的类型就可以获得更多的原型实...原创 2019-01-10 21:51:34 · 201 阅读 · 0 评论 -
设计模式之建造者模式
Builder模式也叫建造者模式或者生成器模式,用来隐藏复合对象的创建过程,建造者,用于对复杂对象的构造、初始化,与工厂模式不同的是,建造者的目的在于把复杂构造过程从不同对象展现中抽离出来,使得同样的构造工序可以展现出不同的产品对象。建造者模式通常包括下面几个角色:1、Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉...原创 2019-01-10 22:44:10 · 148 阅读 · 0 评论 -
设计模式之适配器模式
模式定义何谓适配器模式?适配器模式就是将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。在适配器模式中,我们可以定义一个包装类,包装不兼容接口的对象,这个包装类就是适配器,它所包装的对象就是适配者。适配器提供给客户需要的接口,适配器的实现就是将客户的请求转换成对适配者的相应的接口的引用。也就是说,当客户调用适配器的方法时,适配器方法内部将调用适配者的方...原创 2019-01-13 18:47:42 · 264 阅读 · 0 评论 -
设计模式之桥接模式
模式定义 桥接模式即将抽象部分与它的实现部分分离开来,使他们都可以独立变化。 桥接模式将继承关系转化成关联关系,它降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量。 将抽象部分与他的实现部分分离这句话不是很好理解,其实这并不是将抽象类与他的派生类分离,而是抽象类和它的派生类用来实现自己的对象。这样还是不能理解的话。我们就先来认清什么是抽象化,什么是实现化,什么是脱...原创 2019-01-13 18:47:27 · 250 阅读 · 0 评论 -
设计模式之装饰者模式
装饰(Decorator)模式又叫做包装模式,动态地给一个对象添加额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。。首先定义一个Car ,这个车类有在地上跑,在天上飞,在水里游的方法public class Car { public void run(){ System.out.println("在地上跑"); } public void...原创 2019-01-10 23:43:02 · 241 阅读 · 0 评论 -
设计模式之组合模式
模式定义 组合模式组合多个对象形成树形结构以表示“整体-部分”的结构层次。 组合模式对单个对象(叶子对象)和组合对象(组合对象)具有一致性,它将对象组织到树结构中,可以用来描述整体与部分的关系。同时它也模糊了简单元素(叶子对象)和复杂元素(容器对象)的概念,使得客户能够像处理简单元素一样来处理复杂元素,从而使客户程序能够与复杂元素的内部结构解耦。 在使用组合模式中需要注意一点也...原创 2019-01-13 18:47:11 · 172 阅读 · 0 评论 -
设计模式之外观模式
针对外观模式,在项目开发和实际运用中十分频繁,但是其极易理解,下面就简要介绍一下。概念介绍 外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。角色及使用场景 简单来说,该模式就是把一些复杂的流程封装成一个接口供...原创 2019-01-13 18:47:00 · 970 阅读 · 0 评论 -
设计模式之享元模式
模式定义 所谓享元模式就是运行共享技术有效地支持大量细粒度对象的复用。系统使用少量对象,而且这些都比较相似,状态变化小,可以实现对象的多次复用。 共享模式是支持大量细粒度对象的复用,所以享元模式要求能够共享的对象必须是细粒度对象。 在了解享元模式之前我们先要了解两个概念:内部状态、外部状态。 内部状态:在享元对象内部不随外界环境改变而改变的共享部分。 外部状态:随着环...原创 2019-01-13 18:46:00 · 226 阅读 · 0 评论 -
设计模式之代理模式
代理模式代理(Proxy)是一种构造型的设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接连接明星,而是联...原创 2019-01-13 18:46:31 · 119 阅读 · 0 评论 -
设计模式之模板方法模式
模式定义所谓模板方法模式就是在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。模板方法模式是基于继承的代码复用技术的。在模板方法模式中,我们可以将相同部分的代码放在父类中,而将不同的代码放入不同的子类中。也就是说我们需要声明一个抽象的父类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法让子...原创 2019-01-14 00:05:13 · 539 阅读 · 0 评论 -
设计模式之命令模式
基本定义命令模式将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式支持可撤销的操作。命令模式可以对发送者额接受者完全解耦,发送者也接收者之间并没有直接的联系,发送者只需要知道如何发送请求,不需要关心请求是如何完成了。这就是命令模式,命令模式将方法调用给封装起来了。模式结构从上图可以看出命令模式包含如下几个角色:Command: 抽象命令类Con...原创 2019-01-14 00:05:49 · 178 阅读 · 0 评论 -
设计模式之访问者模式
模式定义访问者模式即表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 首先我们要明确一点就是访问者模式适用于数据结构相对稳定的系统。它是将数据的操作与数据结构进行分离了,如果某个系统的数据结构相对稳定,但是操作算法易于变化的话,就比较适用适用访问者模式,因为访问者模式使得算法操作的增加变得比较简单了。模式结构下图是访问者...原创 2019-01-14 00:05:59 · 210 阅读 · 0 评论 -
设计模式之迭代器模式
迭代器模式定义迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。迭代器模式的角色构成(1)迭代器角色(Iterator):定义遍历元素所需要的方法,一般来说会有这么三个方法:取得下一个元素的方法next(),判断是否遍历结束的方法hasNext()),移出当前对象的方法remove(),(2)具体迭代器角色(Concrete ...原创 2019-01-13 18:48:39 · 231 阅读 · 0 评论 -
设计模式之观察者模式
定义当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。观察者模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步发生改变的对象称之为观察目标,而被通知的对象称之为观察者。一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,所以可以根据需要增加和删除观察者,使得系统更易于扩展。观察者模式又称为发布-订阅模式。模...原创 2019-01-12 14:19:57 · 223 阅读 · 0 评论 -
设计模式之中介者模式
在我们的生活中处处充斥着“中介者”,比如你租房、买房、出国留学、找工作、旅游等等可能都需要那些中介者的帮助,同时我们也深受其害,高昂的中介费,虚假信息。在地球上最大的中介者就是联合国了,它主要用来维护国际和平与安全、解决国际间经济、社会、文化和人道主义性质的问题。国与国之间的关系异常复杂,会因为各种各样的利益关系来结成盟友或者敌人,熟话说没有永远的朋友,也没有永远的敌人,只有永远的利益!所以国与国...原创 2019-01-13 18:48:13 · 172 阅读 · 0 评论 -
设计模式之备忘录模式
模式定义 所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。 备忘录模式将要保存的细节给封装在备忘录中,就是那天要改变保存的细节也不会影响到客户端。模式结构 下图是备忘录模式的UML结构图: 备忘录模式主要包含入下几个角色: Originator: 原发器。负责创建一个备忘录...原创 2019-01-14 00:05:28 · 335 阅读 · 0 评论 -
设计模式之解释器模式
定义 解释器模式(Interpreter)是一种特殊的设计模式,它建立一个解释器,对于给定的一个计算机程序设计语言,用来解释预先定义的文法,适配器模式是一种简单的语法解释器架构。下图是解释器模式的UML结构图。 解释器模式主要包含如下几个角色: AbstractExpression: 抽象表达式。声明一个抽象的解释操作,该接口为抽象语法树中所有的节点共...原创 2019-01-13 18:47:59 · 181 阅读 · 0 评论 -
设计模式之状态模式
.模式定义 在很多情况下,一个对象的行为取决于它的一个或多个变化的属性,这些属性我们称之为状态,这个对象称之为状态对象。对于状态对象而已,它的行为依赖于它的状态,比如你要预订房间,那么只有当该房间为空闲时你才能预订,你想入住该房间也只有当你预订了该房间或者该房间为空闲时。对于这样的一个对象,当它在于外部事件产生互动的时候,其内部状态就会发生改变,从而使得他的行为也随之发生改变。 那...原创 2019-01-14 00:05:39 · 203 阅读 · 0 评论 -
设计模式之策略模式
策略模式对一系列的算法加以封装,为所有算法定义一个抽象的算法接口,并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法选择由客户端决定使用哪种策略。策略模式主要用来处理算法的切换。 在我们的生活中我们可以通过很多种不同的方式来完成一件事情,这里的每一种方式都可以称作为一种策略。我们可以根据环境、条件等因素的不同选择不同的策略来完成这件事情。比如马上过...原创 2019-01-12 13:44:23 · 222 阅读 · 0 评论 -
设计模式之职责链模式
模式定义职责链模式,也叫责任链模式或者责任连锁模式。 避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止,这就是职责链模式,也叫责任链模式或者责任连锁模式。 在职责链模式中最关键的一点就是客户提交请求后,请求沿着链往下传递直到有一个处理者处理它,在这里客户无需关心它的请求是哪个处理者来处理,反正总有一个处理者...原创 2019-01-13 18:48:29 · 215 阅读 · 0 评论