23种设计模式笔记

来源:互联网 发布:iphone 5s电池淘宝威锋 编辑:程序博客网 时间:2024/06/15 12:21

设计模式分类:

创建型创建对象时,不再由我们直接实例化对象;而是根据特定场景,由程序来确定创建对象的方式,从而保证更大的性能、更好的架构优势。创建型模式主要有简单工厂模式(并不是23种设计模式之一)、工厂方法、抽象工厂模式单例模式、生成器模式和原型模式。

结构型用于帮助将多个对象组织成更大的结构。结构型模式主要有适配器模式adapter桥接模式bridge、组合器模式component、装饰器模式decorator门面模式、亨元模式flyweight代理模式proxy

行为型:用于帮助系统间各对象的通信,以及如何控制复杂系统中流程。行为型模式主要有命令模式command、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式state策略模式、模板模式和访问者模式。

1.创建型:

1.1单例模式(Singleton:Singleton的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案;

1.2工厂模式(Factory):为了提高内聚(Cohesion)和松耦合(Coupling)和程序的扩展性和维护。

1.3抽象工厂模式(AbstractFactory)要创建一组相关或者相互依赖的对象。

1.4生成模式(builder:当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成),我们要复杂对象的创建过程和这个对象的表示(展示)分离开来,这样做的好处就是通过一步步的进行复杂对象的构建,由于在每一步的构造过程中可以引入参数,使得经过相同的步骤创建后得到的对象的展示不一样。

1.5原型模式(Prototype:将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象

 

2.结构型:

2.1桥接模式(Bridge由于实际的需要,某个类具有两个以上的维度变化,如果只是使用继承将无法实现这种需要,或者使得设计变得相当臃肿。而桥接模式的做法是把变化部分抽象出来,使变化部分与主类分离开来,从而将多个的变化彻底分离。最后提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要。

2.2装饰模式(Decorator):提供了一种给类增加职责的方法,不是通过继承实现的,而是通过组合。

2.3组合模式(Composite)就是包含Composite模式在实现中有一个问题就是要提供对于子节点(Leaf)的管理策略,这里使用的是 STL中的 vector,可以提供其他的实现方式,如数组、链表、Hash表等

2.4外观模式(Facade)随着系统的不断改进和开发,它们会变得越来越复杂,系统会生成大量的类,这使得程序流程更难被理解。门面模式可为这些类提供一个简化的接口,从而简化访问这些类的复杂性。门面模式(Facade)也被称为正面模式、外观模式,这种模式用于将一组复杂的类包装到一个简单的外部接口中。

2.5观察者模式(Observer)观察者模式定义了对象间的一对多依赖关系,让一个或多个观察者对象观察一个主题对象。当主题对象的状态发生变化时,系统能通知所有的依赖于此对象的观察者对象,从而使得观察者对象能够自动更新。

2.6享元(Flyweight)模式:免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类).

2.7代理(Proxy )模式:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

3. 行为型:

3.1 模板(Template)模式:目的:为了给业务逻辑(算法)具体实现和抽象接口之间的解耦关键点就是将通用算法封装在抽象基类中,并将不同的算法细节放到子类中实现(继承)。

3.2策略(Strategy)模式:目的:为了给业务逻辑(算法)具体实现和抽象接口之间的解耦。将逻辑(算法)封装到一个类(Context里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口的实现委托给组合对象实现。

3.3 状态(State)模式在 State 模式中我们将状态逻辑动作实现进行分离。当一个操作中要维护大量的 case分支语句,并且这些分支依赖于对象的状态。State模式将每一个分支都封装到独立的类中。主要是要适应对象对于状态改变时的不同处理策略的实现

3.4观察者( Observer)模式:建立一个一(Subject)对多(Observer)的依赖关系,并且做到当“一”变化的时候,依赖这个“一”的多也能够同步改变。在 Observer 模式的实现中,Subject维护一个 list作为存储其所有观察者的容器。每当调用 Notify操作就遍历 list中的 Observer对象,并广播通知改变状态(调用 Observer Update操作)。

3.5备忘录(Memento)模式:目的给用户后悔的权利。Memento模式的关键就是要在不破坏封装行的前提下,捕获并保存一个类的内部状态,这样就可以利用该保存的状态实施恢复操作。Memento模式的关键就是friend classOriginator,Memento的接口都声明为private而将 Originator 声明为 Memento 的友元类。

3.6 中介者(Mediator)模式:提供将对象间的交互和通讯封装在一个类中,各个对象间的通信不必显势去声明和引用,大大降低了系统的复杂性能(了解一个对象总比深入熟悉 n 个对象要好)。另外 Mediator 模式还带来了系统对象间的松耦合。

3.7命令( Command)模式:通过将请求封装到一个对象(Command)中,并将请求的接受者存放到 具体的 ConcreteCommand 类中(Receiver)中,从而实现调用操作的对象和操作的具体实现 者之间的解耦。

3.8 访问者(Visitor)模式:将更新(变更)封装到一个类中(访问操作),并由待更改类提供一个接收接口(封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作)。

3.9 责任链(Chain of Responsibility)模式:可能处理一个请求的对象链接成一个链,并将请求在这个链上传递,直到有对象处理该请求(每个请求在运行时只能有一个接收者)。

3.10 迭代器(Iterator)模式:用来解决对一个聚合对象的遍历问题,将对聚合的遍历封装到一个类中进行,这样就避免了暴露这个聚合对象的内部表示的可能。

3.11解释器 (Interpreter)模式:使用一个解释器为用户提供一个一门定义语言的语法表示的解释器,然后通过这个解释器来解释语言中的句子。

0 0
原创粉丝点击