23种设计模式
23种设计模式分为三类分别是,创建型模式、结构型模式、行为型模式,其中创建型模式中包含了工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式五种设计模
式;结构型模式中包含了适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式七种设计模式;行为型模式包含了解释器模式、迭代器模式、中介者模式、
备忘录模式、观察者模式、状态模式、策略模式、访问者模式、模板方法模式、职责链模式、命令模式、十一种设计模式。
1、 工厂方法模式:
为了满足“开闭原则”在工厂方法中添加了一个抽象工厂,将原来简单工厂模式中具体的工厂,再次进行抽象和具体化。此时具体的工厂类中进行创建工作时就可以在不修改工厂角色的情况下引入新产品。
2、 抽象工厂模式:
该模式是在工厂方法模式上的进一步改造。因为在实际生活中一个工厂可以生产不止一种产品,例如海尔有电视、同时还有洗衣机等。此时的角色就包括抽象工厂、具体工厂、抽象产品、具体产品,这样就方便了添加新的产品族。并且当系统所提供的工厂所需生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构中属于不同类型的具体产品时需要使用抽象工厂模式。
3、 建造者模式:
建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节。通过采用分工合作来实现复杂对象的创建,例如生活中汽车的制造,它包括车轮、方向盘、发送机等各种部件,但是对于用户而言我们不需要了解各个部件的装配细节,我们只需要了解怎么去使用该汽车就行。
4、 原型模式:
该模式指的就是在面向对象系统中,我们使用原型模式来复制一个对象自身,从而克隆出多个与原型对象一模一样的对象。在该克隆过程中有所区分,有的只是简单复制“外形”、有的复制“内在”,这就对应浅克隆和深克隆。
5、 单例模式:
在该模式中包含一个静态私有的成员变量和静态公有的工厂方法将这个实例保存在静态成员变量中,确保只有一个实例被创建。让类自身负责保存它的唯一实例。这个类可以保证没有其他实例被创建,并且它可以提供一个访问该实例的方法。
6、 适配器模式:
该模式与电源适配器的设计类似,它的目的就是将客户提供的接口转换为里一个接口,来确保用户的正常使用,该模式就是为了完成这样的转变。
7、 桥接模式:
该模式为了将抽象与实现部分分离,通过将继承关系改为关联关系,使其比较相对独立的变化而不是相互牵连的问题,以此来降低类与类之间的耦合,减少代码的编写量。
8、 组合模式:
该模式就是一个递归组合的过程,它描述了如何将容器对象和叶子对象进行递归组合,使得用户在使用时无须对它们进行区分,可以一致地对待容器对象和叶子对象。并且它在遍历整个树形结构时,会寻找也包含这个方法的成员对象(可以是容器对象,也可以是叶子对象)并调用执行,由于容器对象和叶子对象在功能上的区别,在使用这些对象的客户端代码中必须有区别地对待容器对象和叶子对象。
9、 装饰模式:
顾名思义,该模式是起到扩展、修饰的,该模式是在不创建子类的情况下,将对象的功能加以扩展,动态的给一个对象加上更多的责任,以此来保护类的封装性。
10、外观模式:
该模式指的就是要求一个子系统的外部与其内部的通信通过一个统一的外观对象进行,外观类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与外观对象打交道,而不需要与子系统内部的很多对象打交道,以此来降低系统的复杂度,提高客户端使用的便捷性。
11、享元模式:
该模式可以通过设置不同的外部状态使得相同的对象可以具有一些不同的特征,而相同的内部状态是可以共享的,其中内部状态的共享是通过共享享元池的共同内容实现的。
12、代理模式:
该模式解决当一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用,其中通过代理来控制原对象的引用,并且代理对象可以在客户端和目标对象之间起到中介的作用。
13、解释器模式:
该模式就是给定一个语言,定义它的文法一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子,简单的说就是自己定义,自己解释。
14、迭代器模式:
该模式类似与通过遥控找电视频道,它遍历所有的频道。该模式通过利用抽象迭代器和具体迭代器、抽象聚合类和具体聚合类,实现存储数据和遍历数据这两个功能,方便了对聚合对象的操作。
15、中介者模式:
该模式通过一个中介对象来实现其他两个对象的交互,使各对象可以独立地改变他们之间的交互,从而使其耦合松散。
16、备忘录模式:
该模式其实就是给我们的应用程序一次撤销的机会
17、观察者模式:
该模式建立了一种一对多的依赖关系,让多个观察者对象同时监听某一个对象,当对象发生变化时,会主动的告知观察者对象。感觉类似监听。
18、状态模式:
该模式就是将所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。当状态发生变化时看起来像是修改了整个内容,但是实际并没有。
19、策略模式:
该模式就是可以使得系统灵活的选择解决途径,也可以方便的添加新的解决途径,就类似于我们对不同的事务有不同的解决方案。
20、访问者模式:
该模式就是针对不同的对象给出不同的内容,在不改变各元素的类的前提下定义作用于这些元素的新操作。该模式的目的是封装一些施加于某种数据结构元素之上的操作,一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。
21、模板方法模式:
该模式指的就是将相同的代码放在父类中,并且在父类中提供一个定义算法框架的模板方法,以此来具体实现不同的子类,该模式基于代码的复用。
22、职责链模式:
该模式可以将请求的处理者组织成一条链,并使请求沿着链传递,由链上的处理者对请求进行相应的处理,客户端无须关心请求的处理细节以及请求的传递,只需将请求发送到链上即可,将请求的发送者和请求的处理者解耦。在职责链上的每一个对象都是请求的处理者。
23、命令模式:
该模式最常用来消除代码间的耦合,它就是对命令的封装,其实就是把一系列的操作写到一个方法中,然后供客户端调用。