UML标识
c++设计模式:创建型+结构型+行为型:5+7+11
一句话感悟:目的:高内聚、低耦合
底层提供抽象接口,上层提供数据存储和实现,组合先于继承 (FCoI:Favor Composition Over Inheritance)
给每一个类添加底层抽象,又便于实现高内聚、低耦合
对象创建型模式:
1.factory模式:来自同一抽象底层的多个产品,可以只需使用工厂模式
2.abstractfactory模式:来自多个抽象底层的多个产品,可以用一个抽象工厂派生的多个具体工厂来管理各个不同抽象底层的产品。一个具体工厂管理一类具体产品的创建。
3.singleton模式:该对象只允许创建一次。私有构造函数+静态构造方法
4.builder模式:大型对象的创建。需要由几部分构建成。
5.prototype模式(深度复制模式):通过抽象层接口,实现深度复制。
需要实现复制构造函数,然后以this对象为参数调用复制构造函数new一个对象出来
程序结构型模式:
1.bridge模式:实现需求与实现分离。以组合的形式分离需求抽象与算法实现。通过组合(代理)将需求抽象与单个算法实现分开。
2.adapter模式:以继承和组合的形式转换类的接口。调用方式为:Target* a=new Adapter(new Adaptee()) 通常考虑被适配者的实现不公开。适配器需要继承Target,并实现相应方法。
3.decorator模式:以组合的形式给类的方法添加修饰。通过组合的方式给类添加方法,而不是直接添加到类中。可以避免给父类添加新的接口。
4.composite模式:以树的形式实现对类的访问。类中提供对同类对象指针的存储,形成树状结构,便于递归管理。
5.flyweight(轻量级)模式:以类厂的形式实现对象共享。flyweight类维护一个已创建的对象链表,每个对象自身维护一个创建时赋予的关键字。由flyweight工厂类统一创建指定键值的类,如果存在则不再创建并返回该对象指针。
6.facade(封装)模式:以组合的形式实现把多个类的不同方法封装在一个方法中。太简单。
7.proxy(代理)模式:以组合的形式封装对其他类方法的调用。
程序行为模式:
1.template模式:(挺好:底层实现算法框架,上层实现具体细节)以继承的方式,使底层抽象实现通用算法模版,上层实现算法细节,从而把算法细节封装在上层。 DIP(依赖倒置)
虚函数都是通过虚表来调用的,用谁的指针就调用谁的虚函数。
2.strategy模式:以组合的方式,使抽象实现算法模版,而算法细节在被组合对象中实现。 template与strategy的应用场景相同,区别是继承还是组合。(上下文是通过聚合来实现的。)
3.state模式:以聚合的方式,实现有限状态机。状态的公共数据都保存在Context上下文类中。
4.Observer模式:建立一个一对多的依赖关系,当一个对象(subject)状态发生变化时,通知其它对象(observer)进行相应更新。 据说是很重要的一种设计模式。
5.Memento(记忆)模式:
6.Mediator(调解)模式:专门负责提供对象间的交互,从而使得对象实现松耦合。
7.command模式:将请求的接受者放到command的具体子类concreteCommand中,当请求到来时(Invoker发出Invoke消息激活command对象),concreteCommand将处理请求交给Reveiver对象进行处理。
8.visitor模式:Visitor模式在不破坏类的前提下,为类提供增加新的新操作。Visitor模式的关键是双分派(Double-Dispatch,聚合的双方能互访文)的技术。C++语言支持的是单分派。
9.chain of responsibility 模式:(多对象同时处理一个请求)描述其实就是这样一类问题->将可能处理一个请求的对象链接成一个链,并将请求在这个链上传递,直到有对象处理该请求
10:iterator 模式:
11.interpreter模式:
本文出自 “tech记录” 博客,谢绝转载!