![](https://img-blog.csdnimg.cn/2019110116170338.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
设计模式
GM.
这个作者很懒,什么都没留下…
展开
-
设计模式学习笔记——23 桥梁模式
桥梁模式定义将抽象和实现解耦, 使得两者可以独立的变化优点:抽象和实现分离. 这是桥梁模式的主要特点, 它完全是为了解决继承的缺点而提出的设计模式. 在该模式下,实现可以不受抽象的约束,不用再绑定在一个固定的抽象层次上优秀的扩充能力.实现细节对客户透明. 客户不用关心细节的实现, 它已经由抽象层通过聚合关系完成了封装使用场景:不希望或不适用使用继承的场景. 例如继承层次过滤、...原创 2019-11-24 15:17:43 · 126 阅读 · 0 评论 -
设计模式学习笔记——22 享元模式
享元模式定义享元模式(FlyWeight),运用共享技术有效的支持大量细粒度的对象。享元模式的定义为我们提出了两个要求:细粒度和共享对象。我们知道分配太多的对象到应用程序中将有损程序的性能,同时还容易造成内存溢出,要避免这种情况,用到的就是共享技术,这里就需要提到内部状态和外部状态了。因为要求细粒度对象,所以不可避免地会使对象数量多且性质相近,此时我们就将这些对象的信息分为两个部分:内部状...原创 2019-11-23 17:53:53 · 110 阅读 · 0 评论 -
设计模式学习笔记——21 解释器模式
解释器模式定义给定一种语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.角色AbstractExpression(抽象表达式):在抽象表达式中声明了抽象的解释操作,它是所有终结符表达式和非终结符表达式的公共父类。TerminalExpression(终结符表达式):终结符表达式是抽象表达式的子类,它实现了与文法中的终结符相关联的解释操作,在句子中的每...原创 2019-11-22 19:51:29 · 94 阅读 · 0 评论 -
设计模式学习笔记——20 状态模式
状态模式定义允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。状态模式中的角色:Context上下文环境角色:负责状态的切换,持有一个内部状态对象,代表着环境当前所处的状态。State抽象状态角色:可以是一个接口或者抽象类,定义了所有具体状态的共同接口或者是说动作行为,任何具体状态都要实现这些接口。ConcreteState具体状态角色:处理来自Contex...原创 2019-11-21 16:28:24 · 119 阅读 · 0 评论 -
设计模式学习笔记——19 访问者模式
访问者模式定义表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。使用场景对象结构比较稳定,但经常需要在此对象结构上定义新的操作。需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免这些操作“污染”这些对象的类,也不希望在增加新操作时修改这些类。涉及角色编辑Visitor 抽象访问者角色,为该对象结构中具体元素角色...原创 2019-11-20 18:52:42 · 89 阅读 · 0 评论 -
设计模式学习笔记——18 备忘录模式
备忘录模式备忘录模式是一种软件设计模式:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。优点:有时一些发起人对象的内部信息必须保存在发起人对象以外的地方,但是必须要由发起人对象自己读取,这时,使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界。本模式简化了发起人类。发起人不再需要管...原创 2019-11-19 15:00:44 · 117 阅读 · 0 评论 -
设计模式学习笔记——17 门面模式
门面模式门面模式,是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使得子系统更容易使用。优点:减少系统间依赖提高了灵活性:不管子系统内部如何变化,只要不影响门面对象,可以自由行动。提高了安全性:想让外界访问子系统的哪些业务就开通哪些逻辑,不在门面上开通的方法,外界就不能访问。缺点:门面模式最大缺点就是不符合开闭原则,对修改关闭,对...原创 2019-11-18 15:37:23 · 115 阅读 · 0 评论 -
设计模式学习笔记——16 观察者模式
观察者模式观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在观察者模式中,主题是通知的发布者,它发出通知时并不需要知道谁是它的观察者,可以有任意数目的观察者订阅并接收通知。观察者模式的主要的作用就是对对象解耦,将观察者和被观察者完全隔离。优点观察者模式解除了主题和具体观察者的耦合,让耦合的双方都依赖于抽...原创 2019-11-17 22:11:12 · 111 阅读 · 0 评论 -
设计模式学习笔记——15 组合模式
组合模式定义组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 “组合对象” 的含义。组合模式让你可以优化处理递归或分级数据结构。有许多关于分级数据结构的例子,使得组合模式非常有用武之地。关于分级数据结构的一个普遍性的例子是你每次使用电脑时所遇到的:文件系统...原创 2019-11-16 16:20:17 · 116 阅读 · 0 评论 -
设计模式学习笔记——14 迭代器模式
迭代器模式定义提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。迭代器模式是一种对象行为型模式优点访问一个聚合对象的内容而无须暴露它的内部表示。遍历任务交由迭代器完成,这简化了聚合类。它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。增加新的聚合类和迭代器类都很方便,无须修改原有代码。封装性良好,为遍历不同的聚合结构提供一个统一的接口...转载 2019-11-16 15:57:37 · 99 阅读 · 0 评论 -
设计模式学习笔记——13 适配器模式
适配器模式将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。优点:1.可以让任何两个没有关联的类一起运行。2.提高了类的复用。3.增加了类的透明度。4.灵活性好。缺点:1.过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出...原创 2019-11-15 16:52:14 · 88 阅读 · 0 评论 -
设计模式学习笔记——12 策略模式
策略模式策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。策略模式:定义了一组算法(业务规则);封装了每个算法;这族的算法可互换代替(interchangeable)。优点策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法...原创 2019-11-14 14:37:35 · 133 阅读 · 0 评论 -
设计模式学习笔记——11 装饰模式
装饰模式定义装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。优点Decorator模式与继承关系的目的都是要扩展对象的功能,但是Decorator可以提供比继承更多的灵活性。通过使用不同的具体装饰类以及这些装饰类的排列组合,设计师可以创造出很多不同行为的组合。缺点这种比继承更加灵活机动的特性,也...原创 2019-11-13 13:59:56 · 84 阅读 · 0 评论 -
设计模式学习笔记——10 责任链模式
责任链模式定义责任链模式使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连城一条链,并沿着这条链传递该请求,直到有对象处理它为止。优点降低耦合度。它将请求的发送者和接收者解耦简化了对象,使得对象不需要知道链的结构增强给对象指派职责的灵活性,允许动态地新增或者删除责任链增加新的请求处理类方便缺点每个请求都是将责任链从头遍历到尾,如果较长,性能有影...原创 2019-11-13 12:10:53 · 88 阅读 · 0 评论 -
设计模式学习笔记——09 命令模式
命令模式概念将一系列请求封装在一个对象中, 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。命令模式是一种数据驱动的设计模式,它属于行为型模式,请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。优点:类间解耦:调用者角色与接收者角色之间没有任何依...原创 2019-11-11 18:44:38 · 92 阅读 · 0 评论 -
设计模式学习笔记——08 中介者模式
中介者模式Mediator模式也叫中介者模式,Mediator模式是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中,对象通过Mediator对象同其他对象交互,Mediator对象起着控制器的作用。MVC中的C控制器就是一个中介者,它将M业务逻辑和V视图隔离开,把M运行的结果和V代表的视图融合成一个前端可以展示的页面,减少M和V的依赖关系。优点减少...原创 2019-11-10 21:42:01 · 103 阅读 · 0 评论 -
设计模式学习笔记——07 代理模式
代理模式代理模式可以为其他对象提供一种代理(Proxy)以控制对这个对象的访问。所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一般在交互的过程中(交互前后),进行某些特别的处理。代理模式分三种,普通代理,强制代理,动态代理普通代理下面模拟了普通代理,通过代理实例访问被代理对象package proxy;public i...原创 2019-11-08 11:41:59 · 104 阅读 · 0 评论 -
设计模式学习笔记——06 原型模式
原型模式这是设计模式里我觉得最简单的模式,,,定义用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。使用场景1 类的初始化需要消耗非常多的资源,这个资源包括数据,硬件资源等,通过原型拷贝避免这些消耗。2 通过new产生一个对象需要消耗非常繁琐的数据准备或访问权限,这时可以使用原型模式。3 一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑用原型...原创 2019-11-06 22:05:50 · 91 阅读 · 0 评论 -
设计模式学习笔记—— 05 建造者模式
建造者模式也叫生成器模式,将一个复杂的对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。建造者模式4个角色:Product产品类通常实现了模板方法模式,也就是有模板方法和基本方法。Builder抽象构建者ConcreteBuilder具体构造者Director导演类负责安排已有模块的顺序,然后告诉Builder开始建造。使用场景相同的方法,不同的执行顺序,产生不同的事...原创 2019-11-05 18:24:05 · 127 阅读 · 0 评论 -
设计模式学习笔记——04 模板方法模式
Template MethodTemplate Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。使用场景1 多个子类有公有的方法,且逻辑基本相同2 重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则有各个子类实现。3 重构时模板方法模式是一个经常使用的模式,把相...原创 2019-11-04 19:38:55 · 96 阅读 · 0 评论 -
设计模式学习笔记——03 简单工厂 工厂方法 抽象工厂
简单工厂简单工厂模式也成静态工厂模式,但此模式不符合开闭原则,但仍然很常用适用范围:工厂类需要创建的对象种类比较少,客户端只需要知道传入工厂类的参数,对于如何创建对象(逻辑)不关心嗯,上段代码:public abstract class Bread { public abstract void getBread();}public class Brioche extends Br...原创 2019-11-04 12:48:10 · 89 阅读 · 0 评论 -
设计模式学习笔记——02 单例模式
单例模式什么是单例模式?一个类只有一个实例存在,同时提供能对该实例加以访问的静态访问方法。实现方式单例模式网上有好几个实现方式,其中比较耳熟的是一下三种:1 饿汉模式2 懒汉模式3 双重检查其中懒汉模式线程不安全,饿汉模式与双重检查是线程安全的,双重检查是在懒汉模式的基础上做修改,达到线程安全的目的。还有两种推荐使用的模式:1 静态内部类实现2 枚举实现饿汉模式饿汉模式...原创 2019-11-02 16:05:53 · 72 阅读 · 0 评论 -
设计模式学习笔记——01 6大原则
1 单一职责定义应该有且仅有一个原因引起类的变更。优点1 类的复杂性降低,实现什么职责都有清晰明确的定义;2 可读性提高;3 可维护性提高;3 变更引起的风险降低;注意 单一职责原则提出了一个编写程序的标准,用 “职责” 或 “变化原因” 来衡量接口或类设计得是否优良,但是 “职责” 和 “变化原因” 都是不可度量的,因项目而异,因环境而异。对于接口,在设计时一定要做到单一,实...原创 2019-11-02 08:30:53 · 112 阅读 · 0 评论