设计模式
闭关学习ing
吾尝终日而思矣,不如须臾之所学也!
展开
-
结构型--享元模式
概念原创 2019-05-24 11:40:03 · 96 阅读 · 0 评论 -
行为型--命令模式
概念将一个请求封装成一个对象(Command),从而使你可以用不同的请求对客户进行参数化。目的是达到命令的发出者和执行者之间解耦,实现请求和执行分开。三个角色:received:行为实现者,真正的命令执行对象。Command:命令类,含有具体接收者成员引用。invoker: 行为请求者,利用命令对象成员,为接收者发布命令。优点:降低了系统耦合度。 分离行为请求者与行为实现者。...原创 2019-05-24 20:42:59 · 146 阅读 · 0 评论 -
行为型--备忘录模式
标题保存一个对象的某个状态,以便在适当的时候恢复对象到那个状态。源类A中决定需要备份的属性,备忘录类B是用来存储A的需要备份的内部状态,类C用来存储多个备忘录,且只能存储,不能修改等操作。优点:给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。实现了信息的封装,使得用户不需要关心状态的保存细节。缺点:消耗资源。如果类的成员变量过多,势必会占用比较...原创 2019-05-24 21:03:31 · 113 阅读 · 0 评论 -
行为型--状态模式
标题当对象的内部状态改变时,使其行为也随着改变。优点:将所有与某个特定状态有关的行为封装到一个类中,并且将属于不同状态的行为分割开。使得对象的行为跟随状态变化而变化。允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。状态对象可以被多个环境对象共享,从而减少系统中对象的个数。缺点:会增加系统类和对象的个数。状态模式的结构与实现都较为复杂,如果使用不当将导致程序...原创 2019-05-24 22:11:21 · 162 阅读 · 0 评论 -
创建型--桥接模式
概念将抽象部分与实现部分分离,使它们都可以独立的通过导出子类的方式扩充。优点: 1、抽象和实现的分离。 2、优秀的扩展能力。 3、实现细节对客户透明。缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。举例public class User1 { public static void main(String[] args)...原创 2019-05-21 22:34:25 · 151 阅读 · 0 评论 -
行为型--解释器模式
概念给定一个语言,定义它的文法的一种表示。定义一个解释器,这个解释器可以表现出该特定表示,使用该表示来解释语言中的句子。就是说,用解释器来解释我想要解释的那些语句。优点:可扩展性比较好,灵活。增加了新的解释表达式的方式。易于实现简单文法。缺点:可利用场景比较少。对于复杂的文法比较难维护。解释器模式会引起类膨胀。解释器模式采用递归调用方法。 举例pu...原创 2019-05-26 16:42:48 · 171 阅读 · 0 评论 -
行为型--中介者模式
概念用来降低多个对象和类之间的通信复杂性。该模式用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,仅仅只需要把一个对象的请求交给它的中介者即可,从而使其耦合松散,而且可以独立地改变它们之间的交互。优点:降低了类的复杂度,将一对多转化成了一对一。(一个对象与多个对象交互变成与一个中介者交互)各个类之间的解耦。符合迪米特原则。缺点:中介者类会很庞大,变得复...原创 2019-05-26 17:34:45 · 173 阅读 · 0 评论 -
行为型--访问者模式
概念访问者模式把数据结构和作用于结构上的操作解耦合,使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。访问者模式适用于数据结构相对稳定算法又易变化的系统。因为访问者模式使得算法操作增加变得容易。数据结构是指包含许多对象的对象结构。访问者类定义了对象被访问时的具体操作,当对象接收了一个该类访问者时,就会执行这个操作。所以如果需要在访问同一对象时执行不同操作,就需要添加新的访问者类。...原创 2019-05-26 19:47:22 · 345 阅读 · 0 评论 -
结构型--适配器
概念配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。适配器模式是将某个类的接口转换成客户端期望的另一个接口表示,使原本由于接口不兼容而不能一起工作的那些类可以一起工作。优点:可以让任何两个没有关联的类一起工作。 (比如接口的实现类与它持有的对象合作)提高了类的复用(不用总写重复代码)。缺点:4. 过多地使用适配器,会让系统非常零乱,不易把握整体。比如,...原创 2019-05-17 22:07:28 · 125 阅读 · 0 评论 -
结构型--组合模式
概念原创 2019-05-17 22:21:42 · 92 阅读 · 0 评论 -
结构型--装饰器
概念原创 2019-05-17 23:42:52 · 70 阅读 · 0 评论 -
行为型--责任链模式
概念为请求创建了一个接收者对象组成的链,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。请求发出者并不清楚最终是哪个对象处理的该请求,所以,责任链模式可以实现,在隐瞒客户端的情况下,对系统进行动态的调整。优点:降低耦合度。对请求的发送者和接收者进行了解耦。对象不需要知道链的结构。增强给对象指派职责的灵活性。通过改变...原创 2019-05-24 19:09:41 · 136 阅读 · 0 评论 -
行为型--迭代器模式
概念顺序访问集合对象的元素,且不需要知道集合对象的底层表示。优点:在不暴露集合的内部结构情况下,可以让外部代码透明地访问集合内部的数据。将存储数据和遍历数据功能分开,简化了集合类。在同一个集合上可以定义多种遍历方式。在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。缺点:由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,...原创 2019-05-24 17:54:42 · 186 阅读 · 0 评论 -
创建型--工厂模式
概念工厂模式分为三种:普通工厂方法模式、多个工厂方法模式、静态工厂方法模式。建立一个工厂类,对实现了同一接口的一些类提供创建对象的方法。利用该模式创建对象时,不会对客户端暴露创建逻辑,创建时将返回所有对象共同的接口来指向新创建的对象。工厂类用来创建具体产品。优点:屏蔽对象的具体创建逻辑,调用者只关心用来创建对象的工厂类(及类中方法)。扩展性高,如果想增加一个产品,只要在工厂类中修改...原创 2019-05-15 16:35:49 · 115 阅读 · 0 评论 -
创建型--抽象工厂模式
概念工厂模式有一个问题:类的创建依赖工厂类。也就是说,如果想要扩展程序,产生更多种类的实现该同一接口的对象,必须对工厂类进行修改,这违背了闭包原则。为解决这个问题,使用抽象工厂模式:创建多个工厂类。这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。工厂模式:一个工厂类用来创建多个对象。抽象工厂模式:多个工厂类用来创建多个对象。一种产品由一种对应的工厂类来创建。...原创 2019-05-15 16:50:28 · 90 阅读 · 0 评论 -
设计模式--总览
概述设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。设计模式的六大原则...原创 2019-05-24 12:19:13 · 107 阅读 · 0 评论 -
创建型--建造者模式
概念原创 2019-05-23 23:24:48 · 102 阅读 · 0 评论 -
创建型--单例模式
概念保证一个类仅有一个实例,并提供一个访问该实例的全局访问点。该模式涉及到一个单一的类,该类自己负责创建自己的对象,同时确保只能有单个对象被创建。同时这个类提供了一种访问该唯一对象的方式,可以直接访问,不需要对类进行实例化。注意:单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须为所有其他对象提供这一实例的访问入口。优点:在内存里只有一个实例,减少了内存的开...原创 2019-05-15 20:57:13 · 87 阅读 · 0 评论 -
创建型--原型模式
概念将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。方法见...原创 2019-05-15 22:18:38 · 69 阅读 · 0 评论 -
结构型--代理模式
详见 代理原创 2019-05-18 14:21:23 · 87 阅读 · 0 评论 -
行为型--策略模式
概念定义一系列算法,并将每个算法封装起来,使他们可以相互替换,外部用户只需要决定用哪个算法即可,客户端对象的行为可以根据算法(策略)的改变而改变。而算法的变化却不会影响到使用算法的客户。换言之,客户需要使用多种算法,但算法的实现不能每次都写在客户端,也不能在客户端去扩展。优点:算法可以自由切换。避免在客户端使用多重条件去判断要执行的算法是哪个。扩展性良好。算法的扩展不影响客户。...原创 2019-05-24 16:02:20 · 154 阅读 · 0 评论 -
行为型--模板模式
概念用一个抽象类定义一些方法作为模板,并将其中某些方法的实现推迟到子类中,子类可以不改变抽象类的结构即可重定义类中的某些特定步骤。之后用户通过调用抽象类方法,实现对子类方法的调用。优点:封装不变部分,扩展可变部分。便于扩展和重定义。提取公共代码,便于维护,复用。行为由父类控制,子类实现。缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。&nb...原创 2019-05-24 16:39:31 · 103 阅读 · 0 评论 -
行为型--观察者模式
概念当一个对象的状态发生变化时,所有依赖于它的对象都会收到通知并被自动更新。定义了对象间的一种一对多的依赖关系。优点:观察者和被观察者是抽象耦合的。建立一套触发机制,实现状态的同步更新。缺点:如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。...原创 2019-05-24 17:36:14 · 104 阅读 · 0 评论 -
结构型--外观模式
概念 为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。(其实就是子系统中的类共同使用时太麻烦,客户不能每次为了完成这个功能都写一遍重复的代码,所以把代码抽象出来,封装到一个类的方法中)优点:减少客户与子系统之间的耦合度。客户在利用子系统实现某功能时,无需使用具体的子系统组件,只需要使用这个外观界面。缺点:不符合开闭原则,如果要...原创 2019-05-18 15:22:01 · 102 阅读 · 0 评论