23种设计模式汇总整理

根据处理范围不同,设计模式又可分为**类模式和对象模式**,类模式处理类与子类的关系,通过处理这些关系来建立继承,属于静态关系,在编译时候确定下来;对象模式处理对象之间的关系,运行时发生变化,属于动态关系。

处理者有两个选择:承担责任或者把责任推给下家。

状态模式:允许一个对象在其对象内部状态改变时改变它的行为。

其中对象的适配器模式是各种模式的起源,如下图:!(https://img-blog.csdnimg.cn/20181026153243388.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2E3NDUyMzM3MDA=,size_27,color_FFFFFF,t_70)6、结构型-适配器模式:适配器模式主要用于将一个类或者接口转化成客户端希望的格式,使得原本不兼容的类可以在一起工作,将目标类和适配者类解耦;同时也符合开闭原则,可以在不修改原代码的基础上增加新的适配器类;将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性,但是缺点在于更换适配器的实现过程比较复杂。

通过这种方法去除对象之间的耦合。

设计模式允许我们在较高的抽象层次上进行设计。

通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

在设计时需要反复衡量,是否可以减少public方法和属性,是否可以修改为private、package-private、protected等访问权限,是否可以加上final关键字等。

回到上面的代码,虽然没多少技术含量,但对调用者而言,我**管你怎么实现,我轻轻调一下createOrder方法就完事**了。

设计模式的六大原则1、开闭原则(OpenClosePrinciple)开闭原则就是说对扩展开放,对修改关闭。

实现的方法为先判断实例存在与否,如果存在则直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象。

这样当被依赖的类变化时,才能最小的影响该类。

定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的改变不会影响使用算法的客户。

**抽象工厂**:创建相关或依赖对象的家族,而无需明确指定具体类。

FactoryMethod使一个类的实例化延迟到其子类。

下期预告今天讲的还是比较片面和粗犷的,很多细节都没有体现出来。

解释器模式描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发的编译器中,它描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。

它还有另外一个意思是:降低类之间的耦合度。

先制定一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现。

**适用性**16.迭代器模式

**意图**提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。

麦当劳和肯德基就是生产鸡翅的Factory工厂模式:客户类和工厂类分开。

备忘录模式:备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。

装饰模式:动态的给对象增加一些职责,即增加其额外的功能。

我们称出现为成员变量、方法参数、方法返回值中的类为直接朋友。

GRASP模式着重考虑设计类的原则及如何分配类的功能,而GoF模式则着重考虑设计的实现、类的交互和软件的质量。

命令模式俺有一个MM家里管得特别严,没法见面,只好借助于她弟弟在我们俩之间传送信息,她对我有什么指示,就写一张纸条让她弟弟带给我。

**概说23种设计模式**1.单例模式单例模式,它的定义就是确保某一个类只有一个实例,并且提供一个全局访问点。

访问者(Visitor)模式:在不改变集合元素的前提下,为一个集合中的每个元素提供多种访问方式,即每个元素有多个访问者对象访问。

**模板方法(TempplateMethod)模式**定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特点步骤。

里氏替换原则中,子类对父类的方法尽量不要重写和重载。

**抽象工厂模式****设计原则**:遵循单一职责、依赖倒置、开闭原则**常用场景**:需要一个接口可以提供一个产品族,且不必知道产品的具体种类**使用概率**:30%**复杂度**:中**变化点**:工厂与产品的种类**选择关键点**:产品族是否需要一起提供,且是否有一致的接口**逆鳞**:无**相关设计模式**建造者模式:两者都是建造一批对象或者说产品,不同的是两者的目的和实现手段,在建造者模式中,是为了复用对象的构建过程而定义了一个指挥者,而在抽象工厂模式中,是为了提供一个这批对象的创建接口而定义了抽象工厂接口。

**其实并不是多么高深的东西。