设计模式
阿文_ing
Think more and code less
展开
-
设计模式之总结篇
设计原则github代码示例开闭原则:对扩展开放,对修改关闭依赖倒置原则:高层不依赖低层,都依赖抽象,细节依赖抽象,抽象不依赖细节单一职责原则:不要存在多于一个导致类变更的原因接口隔离原则:用专门的接口,而不使用总接口,客户端不用实现自己不用的接口迪米特法则:一个对象应该对其他对象保持最少的了解里氏替换原则:子类对象能替换父类对象而程序逻辑不变组合复用原则:尽量使用组合/聚合而不使用继承来达到软件复用的目的设计模式github代码示例创建型模式:简单工厂模式(不属于GOF23种里面),原创 2020-09-29 18:01:57 · 145 阅读 · 1 评论 -
设计模式之访问者模式
定义:访问者模式(Visitor Pattern)是一种将数据结构与数据操作分离的设计模式.是指封装一些作用于某种数据结构中的各元素的操作.特征:可以不改变数据结构的前提下定义作用于这些元素的新的操作.属于行为型模式.适用场景1.数据结构稳定,作用于数据结构的操作经常变化的场景;2.需要数据结构与数据操作分离的场景;3.需要对不同数据类型(元素)进行操作,而不使用分支判断具体类型的场景优点1.解偶了数据结构与数据操作,使得操作集合可以独立变化;2.扩展性好:可以通过扩展访问者角色,实现对数原创 2020-09-29 15:22:42 · 115 阅读 · 0 评论 -
设计模式之观察者模式
定义:观察者模式(Observer Pattern),又叫发布-订阅(Publish/Subscribe)模式,模型-视图(Model/View)模式,源-监听器(Source/Listener)模式或从属者(Dependents)模式.定义一种一对多的依赖关系,一个主题对象可被多个观察者对象同时监听,使得每当主题对象状态变化时,所有依赖于它的对象都会得到通知并被自动更新.属于行为型模式适用场景1.当一个抽象模型包含两个方面内容,其中一个方面依赖另一个方面;2.其他一个或多个对象的变化依赖于另一个对原创 2020-09-29 13:56:48 · 150 阅读 · 0 评论 -
设计模式之中介者模式
定义:中介者模式(Mediator Pattern)又称为调解者模式或调停者模式.用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互.核心:通过中介者解偶系统各层次对象的直接耦合,层次对象的对外依赖通信统统交由中介者转发.属于行为型模式.适用场景1.系统中对象之间存在复杂的引用关系,产生的相互依赖关系结构混乱且难以理解;2.交互的公共行为,如果需要改变行为则可以增加新的中介者类.优点1.减少类间依赖,将多对多依赖转化成了一原创 2020-09-28 17:50:35 · 99 阅读 · 0 评论 -
设计模式之解释器模式
定义:解释器模式(InterPreter Pattern)给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.特征:为了解释一种语言,而为语言创建的解释器.属于行为型模式适用场景1.一些重复出现的问题可以用一种简单的语言来进行表达;2.一个简单语法需要解释的场景.优点1.扩展性强:在解释器模式中由于语法是由很多类表示的,当语法规则更改时,只需修改相应的非终结符表达式即可;若扩展语法时,只需添加相应非终结符类即可;2.增加新的解释表达式的方式;3.原创 2020-09-28 17:50:15 · 151 阅读 · 0 评论 -
设计模式之备忘录模式
定义:备忘录模式(Memento Pattern)又称为快照模式(Snapshot Pattern)或令牌模式(Token Pattern),是指在不破换封装的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.特征:"后悔药"属于行为型模式适用场景1.需要保存历史快照的场景;2.希望在对象之外保存状态,且除了自己其他类对象无法访问状态保存具体内容.优点1.简化发起人实体类(Originator)职责,隔离状态存储与获取,实现了信息的封装,客户端原创 2020-09-28 14:38:42 · 87 阅读 · 0 评论 -
设计模式之状态模式
定义:状态模式(State Pattern)也称为状态机模式(State Machine Pattern),是允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类.属于行为型模式适用场景1.行为随状态改变而改变的场景2.一个操作中含有庞大的多分支结构,并且这些分支取决于对象的状态优点1.结构清晰:将状态独立为类,消除了冗余的if…else或switch…case语句,使代码更加简洁,提高系统可维护性2.将状态转换显示化:通常的对象内部都是使用数值类型来定义状态,状态的切换都是通原创 2020-09-28 10:59:44 · 101 阅读 · 0 评论 -
设计模式之命令模式
定义:命令模式(Command Pattern)是对命令的封装,每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作.命令模式解偶了请求方和接收方,请求方只需请求执行命令,不用关心命令是怎样被操作以及是否被执行...等.本质:解偶命令请求与处理属于行为型模式.适用场景1.现实语义中具备"命令"的操作(如命令菜单,shell命令);2.请求调用者和请求的接收者需要解偶,使得调用者和接收者不直接交互;3.需要抽象出等待执行的行为,比如撤销(Undo)操作和恢复(原创 2020-09-27 20:30:53 · 82 阅读 · 0 评论 -
设计模式之迭代器模式
定义:迭代器模式(Iterator Pattern)又称游标模式(Cursor Pattern),它提供一种顺序访问集合/容器对象元素的方法,而又无须暴露集合内部表示.本质:抽离集合对象迭代行为到迭代器中,提供一致访问接口.属于行为型设计模式适用场景1.访问一个集合对象的内容而无需暴露它的内部表示2.为遍历不同的集合结构提供一个统一的访问接口优点1.多态迭代:为不同的聚合结构提供一致的遍历接口,即一个迭代接口可以访问不同的聚集对象;2.简化集合对象接口:迭代器模式将集合对象本身应该提供的元素原创 2020-09-27 15:13:02 · 127 阅读 · 0 评论 -
设计模式之责任链模式
定义:责任链模式(Chain of Responsibility Pattern) 是将链中每一个节点看作是一个对象,每个节点处理的请求均不同,且内部自动维护一个下一节点对象.当一个请求从链式的首端发出时,会沿着链的路径依次传递给每一个节点对象,直至有对象处理这个请求为止.属于行为型模式适用场景1.多个对象可以处理同一请求,但具体由哪个对象处理则在运行时动态决定;2.在不明确指定接受者的情况下,向多个对象中的一个提交一个请求;3.可动态指定一组对象处理请求.优点1.将请求与处理解偶;2.请求原创 2020-09-27 13:58:32 · 92 阅读 · 0 评论 -
设计模式之策略模式
定义:策略模式(Strategy Pattern)又叫也叫政策模式(Policy Pattern),他是将定义的算法家族,分别封装起来,让它们之间可以互相替换,从而让算法的变化不会影响到使用算法的用户.可以避免多重分支的if…else…和switch语句属于行为型模式适用场景1.假如系统中有很多类,而他们的区别仅仅在于他们的行为不同.2.一个系统需要动态地在几种算法中选择一种.3.需要屏蔽算法规则...原创 2020-09-27 10:06:08 · 225 阅读 · 0 评论 -
设计模式之模板方法模式
定义:模板方法模式(Template Method Pattern)通常又叫模板模式,是指定义一个算法的骨架,并允许子类为其中的一个或者多个步骤提供实现模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤属于行为型设计模式适用场景1.一次性实现一个算法不变的部分,并将可变的行为留给子类来实现2.各个类中公共的行为被提取出来并集中到一个公共的父类中,从而避免代码重复优点1.利用模板方法将相同处理逻辑的代码放到抽象父类中,可以提高代码的复用性.2.将不同的代码在不同的子类中,通过原创 2020-09-25 16:37:33 · 101 阅读 · 0 评论 -
设计模式之委派模式
定义:委派模式(Delegate Pattern)又叫委托模式.它的基本作用就是负责任务的调度和任务分配,将任务的分配和执行分离开来.可以看做是一种特殊情空下的静态代理的全权代理.不属于GOF 23种设计模式之一.属于行为型模式应用场景1.委派对象本身不知道如何处理一个任务(或一个请求),把请求交给其它对象处理2.实现程序的解偶.优点通过任务委派能够将一个大型的任务细化,然后通过统一管理这些子任务的完成情况实现任务的跟进,能够加快任务执行的效率缺点任务委派方式需要根据任务的复杂程度进行不同原创 2020-09-25 14:51:42 · 164 阅读 · 0 评论 -
设计模式之桥接模式
定义:桥接模式(Bridge Pattern)也称为桥梁模式,接口(Interface)模式或柄体(Handle and Body)模式,是将抽象部分与它的具体实现部分分离,使它们都可以独立地变化通过组合的方式建立两个类之间的联系,而不是继承属于结构型模式适用场景1.在抽象和具体实现之间需要增加更多的灵活性的场景2.一个类存在两个(或多个)独立变化的维度,而这两个(或多个)维度都需要独立进行扩展3.不希望使用继承,或因为多层继承导致系统类的个数剧增...原创 2020-09-25 11:21:39 · 138 阅读 · 0 评论 -
设计模式之适配器模式
定义:适配器模式(Adapter Pattern)又叫做变压模式,它的功能是将一个类的接口变成客户端所期望的另一种接口,从而使原本因接口不匹配而导致无法在一起工作的两个类能够在一起工作属于结构型设计模式适用场景1.已经存在的类,它的方法和需求不匹配(方法结果相同或相似)的情空2.适配器模式不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品,不同厂家造成功能类似而接口不相同情空下的解决方案优点1.能提高类的透明性和复用,现有的类复用但不需要改变2.目标和适配器类解偶,提高程序的扩展性原创 2020-09-24 16:38:45 · 81 阅读 · 0 评论 -
设计模式之组合模式
定义:组合模式(Compasite Pattern)也称为整体-部分(Part-Whole)模式,它的宗旨是通过将单个对象(叶子节点)和组合对象(树枝节点)用相同的接口进行表示作用:使客户端对单个对象和组合对象保持一致的方式处理属于结构型模式适用场景1.希望客户端可以忽略组合对象与单个对象的差异时;2.对象层次具备整体和部分,呈树形结构(如树形菜单,操作系统目录结构,公司组织架构)优点1.清楚地定义分层次的复杂对象,表示对象的全部或部分层次2.让客户端忽略了层次的差异,方便对整个层次结构进行原创 2020-09-24 14:40:43 · 275 阅读 · 0 评论 -
设计模式之享元模式
定义:享元模式(Flyweight Pattern)又称为轻量级模式,是对象池的一种实现.类似于线程池,线程池可以避免不停的创建和销毁多个对象,消耗性能.提供了减少对象数量从而改善应用所需的对象结构的方式宗旨:共享细粒度对象,将多个对同一对象的访问集中起来属于结构型模式适用场景常常应用于系统低层的开发,以便解决系统的性能问题系统有大量相似对象,需要缓冲池的场景享元模式扩展内部状态 :不可改变的,不随环境的变化而变化外部状态 :可以改变的优点减少对象的创建,降低内存中对象的数量,降低系统的原创 2020-09-24 10:38:21 · 143 阅读 · 0 评论 -
设计模式之装饰器模式
定义:装饰器模式(Decorator Pattern)也叫包装模式(Wrapper Pattern),是指在不改变原有对象的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能)属于结构型模式适用场景1.用于扩展一个类的功能或给一个类添加附加职责2.动态的给一个对象添加功能,这些功能可以再动态的撤销优点1.装饰器是继承的有力补充,比继承灵活,不改变原有对象的情空下动态地给一个对象扩展功能,即插即用2.通过使用不同装饰类以及这些装饰类的排列组合,可实现不同效果3.装原创 2020-09-23 17:57:47 · 114 阅读 · 0 评论 -
设计模式之门面模式
定义:门面模式(Facade Pattern)又叫外观模式,提供了一个统一的接口,用来访问子系统中的一群接口特征:门面模式定义了一个高层接口,让子系统更容易使用属于结构型模式适用场景子系统越来越复杂,增加门面模式提供简单接口构建多层系统结构,利用门面对象作为每层的入口,简化层间调用门面模式就是特殊的静态代理模式门面模式:重点在于封装静态代理:重点在与增强不做增强的静态代理就是门面模式门面模式和单例模式门面模式做成单例,工具包优点1.简化了调用过程,无需深入了解子系统,以防给子系统带原创 2020-09-22 17:49:44 · 168 阅读 · 0 评论 -
设计模式之代理模式
定义:代理模式(Proxy Pattern)是指为其他对象提供一种代理,以控制对这个对象的访问代理对象在客户端和目标对象之间起到中介作用属于结构型设计模式适用场景保护目标对象增强目标对象...原创 2020-09-22 15:47:07 · 200 阅读 · 0 评论 -
设计模式之建造者模式
定义:建造者模式(Builder Pattern)是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示特征:用户只需指定需要建造的类型就可以获得对象,建造过程及细节不需要了解属于创建型模式适用场景适用于创建对象需要很多步骤,但是步骤的顺序不一定固定如果一个对象有非常复杂的内部结构(很多属性)把复杂对象的创建和使用分离优点封装性好,创建和使用分离扩展性好,建造类之间独立,一定程度上解偶缺点产生多余的Builder对象产品内部发生变化,建造者都要修改,成本较大建造原创 2020-09-21 16:23:09 · 104 阅读 · 0 评论 -
设计模式之原型模式
定义:原型模式(Prototype Pattern)是指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象调用者不需要知道任何创建细节,不调用构造函数属于创建型模式适用场景1.类初始化消耗资源较多2.new产生的一个对象需要非常烦琐的过程(数据备份,访问权限等)3.构造函数比较复杂.4.循环体中产生大量对象时...原创 2020-09-21 15:11:59 · 86 阅读 · 0 评论 -
设计模式之神奇的单例模式
定义:单例模式(Singleton Pattern)是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点隐藏其所有构造方法属于创建型模式常见写法饿汉式单例懒汉式单例注册式单例ThreadLocal单例...原创 2020-09-18 15:39:35 · 101 阅读 · 0 评论 -
设计模式之抽象工厂模式
定义:抽象工厂模式(Abastract Factory Pattern)是指提供了一个创建一系列相关或相互依赖对象的接口,无须指定他们具体的类Provide an interface for creating families of related or dependent objects without specifying their concrete classes属于创建型设计模式缺点规定了所有可能被创建的产品集合,产品族中扩展新的产品困难,需要修改抽象工厂的接口增加了系统的抽象性和理解难原创 2020-09-16 18:36:39 · 82 阅读 · 0 评论 -
设计模式之工厂方法模式
定义:工厂方法模式(Factory Method Pattern)是指定义一个创建对象的接口,但让实现这个接口的类类决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行Define an interface for creating an object, but let subclasses decide which class to instantiate. The Factory method lets a class defer instantiation it uses to subclasse原创 2020-09-16 17:58:58 · 105 阅读 · 0 评论 -
设计模式之简单工厂模式
定义:简单工厂模式(Simple Factory Pattern)是指由一个工厂对象决定创建出哪一种产品类的实例属于创建型模式,但它不属于GOF 23种设计模式例子public interface ICourse { void record();}public class JavaCourse implements ICourse{ @Override public void record() { }}public class PyCourse imple原创 2020-09-16 15:31:54 · 89 阅读 · 0 评论