23种设计模式详细知识点(软件设计师)

设计模式

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。

1.创建型设计模式: ①抽象工厂(Abstract Factory)、②生成器(Builder)、③工厂方法(Factory Method)、④原型(Prototype)、⑤单例(Singleton)
2.结构型设计模式: ①适配器(Adapter)、②桥接(Bridge)、③组合(Composite)、④装饰(Decorator)、⑤外观(Facade)、⑥享元(Flyweight)、⑦代理(Proxy)
3.行为设计模式: ①责任链(Chain of Responsibility)、②命令(Command)、③解释器(Interpreter)、④迭代器(Iterator)、⑤中介者(Mediator)、⑥备忘录(Memento)、⑦观察者(Observer)、⑧状态(State)、⑨策略(Strategy)、⑩模板方法(Template Method)、⑪访问者(Visitor)

A.创建型设计模式(5种)

处理创建对象

1.抽象工厂(Abstract Factory)

2.生成器(Builder)

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

适用于:①当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时;
②当构造过程必须允许被构造的对象有不同的表示时。

3.工厂方法(Factory Method)

定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到其子类。

适用于:当一个类不知道它所必须创建的对象的类的时候;当一个类希望由它的子类来指定它所创建的对象的时候;当类将创建对象的职责委托给多个帮助子类中的某一个,并且希望将哪一个帮助子类是代理者这一信息局部化的时候。

4.原型(Prototype)

用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。

适用于:①当一个系统应该独立于它的产品创建、构成和表示时;
②当要实例化的类是在运行时刻指定时,例如,通过动态装载;
③为了避免创建一个与产品类层次平行的工厂类层次时;
④当一个类的实例只能有几个不同状态组合中的一种时,建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。

5.单例(Singleton)

保证一个类仅有一个实例,并提供一个访问这个唯一实例的全局访问点

适用于:①当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时;
②当这个唯一实例应该是通过子类化可扩展的,并且客户应该无须更改代码就能使用一个扩展的实例时。。

B.结构型设计模式(7种)

类和对象的组合

1.适配器(Adapter)**类和对象*

2.桥接(Bridge)

3.组合(Composite)

将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。

适用于:想表示对象的部分-整体层次结构;希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

4.装饰器(Decorator)

描述了以透明围栏来支持修饰的类和对象的关系,动态地给一个对象添加一些额外的职责 ,从增加功能的角度来看,装饰器模式相比生成子类更加灵活。

适用于:在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责;处理那些可以撤销的职责;当不能采用生成子类的方式进行扩充时。

5.外观(Facade)

为子系统中的一组接口提供一个一致的界面,定义了一个高层接口, 这个接口使得这一子系统更加容易使用。

适用于:要为一个复杂子系统提供一个简单接口时,子系统往往因为不断演化而变得越来越复杂;客户程序与抽象类的实现部分之间存在着很大的依赖性;当需要构建一个层次结构的子系统时,使用Fapde模式定义子系统中每层的入口点。

6.享元(Flyweight)

运用共享技术有效地支持大量细粒度的对象。

一个应用程序使用了大量的对象;完全由于使用大量的对象,造成很大的存储开销;对象的大多数状态都可变为外部状态;如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象:应用程序不依赖于对象标识。

7.代理(Proxy)

C.行为设计模式(11种)

描述类或者对象的交互行为

1.责任链(Chain of Responsibility)

2.命令(Command

3.解释器(Interpreter)***

4.迭代器(Iterator)

5.中介者(Mediator)

用一个 中介对象来封装一系列的对象交互。 中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解;一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象;想定制一个分布在多个类中的行为,而又不想生成太多的子类。欲使一个后端数据模型能够被多个前端用户界面连接,

6.备忘录(Memento)

7.观察者(Observer)

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

当一个抽象模型有两个方面,其中一个方面依赖于另一个方面,将这两者封装在独立的对象中以使它们可以各自独立地改变和复用;当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变时;当一个对象必须通知其他对象,而它又不能假定其他对象是谁,即不希望这些对象是紧耦合的。

8.状态(State)

9.策略(Strategy)

10.模板方法(Template Method)

11.访问者(Visitor)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值