设计模式 1 设计模式的分类 1.0 了解设计模式的方法 设计模式是指在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案; 如何学习设计模式学习目的在现有的设计模式基础上,更好地扩展代码做功能抽象时,如何选择设计模式重点关注方面该设计模式解决了什么问题稳定点变化点该设计模式的代码结构符合那些设计原则如何扩展代码应用场景 1.1 常见的设计模式 定义定义定义定义定义定义定义定义定义设计模式模板方法一个操作中的算法的骨架,而将一些步骤延迟到子类中观察者模式对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新策略模式定义一系列算法,把它们一个个封装起来,并且使它们可互相替换单例模式保证一个类仅有一个实例,并提供一个该实例的全局访问点工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类抽像工厂提供一个接口,让该接口负责创建一系列相关或者相互依赖的对象,无需指定它们具体的类责任链模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系装饰器模式动态地给一个对象增加一些额外的职责,就增加功能而言,装饰器模式比生产子类更为灵活组合模式将对象组合成树型结构以表示部分-整体的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性 2 分析设计模式 2.1 模板方法 模板方法稳定点算法骨架变化点子流程变化代码结构基类中有骨架流程的接口所有的子流程对子类开放并且是虚函数多态的使用方式符合的设计规则单一职责开放封闭,可以用protected依赖倒置接口隔离最小知道原则如何扩展代码实现子类继承基类,复写子流程通过多态调用方式使用 2.2 观察者模式 观察者模式稳定点一对多的关系是不变的变化点多增加,多减少代码结构符合的设计规则开放封闭面向接口接口隔离如何扩展代码继承实现接口调用attach添加多调用detach减少多 2.3 策略模式 策略模式稳定点客户程序和算法的调用关系变化点算法种类和算法内容代码结构符合的设计规则开放封闭面向接口接口隔离如何扩展代码 2.4 单例模式 单例模式稳定点一个实例,提供全局访问点变化点复用其他单例模式的代码,形成新的单例代码结构私有的构造和析构禁止掉的拷贝构造\拷贝赋值\移动构造\移动赋值静态类成员函数静态私有成员变量访问方式:name::Getinstance符合的设计规则开放封闭面向接口接口隔离如何扩展代码继承组合 2.5 工厂模式 工厂模式稳定点创建同类对象的接口同类对象有相同的职责变化点创建对象的扩展代码结构一个功能接口对象创建接口创建具体对象调用功能接口符合的设计规则最小知道原则面向接口如何扩展代码实现对象创建的接口实现功能接口多态调用 2.6 抽象工厂 抽象工厂稳定点创建同类对象的接口同类对象有多种职责变化点创建对象的扩展代码结构一个功能接口对象创建接口创建具体对象调用多个功能接口符合的设计规则最小知道原则面向接口如何扩展代码实现对象创建的接口实现功能接口多态调用 工厂方法和抽象工厂的区别: 1、抽象工厂需要创建一系列功能对象(多个功能接口) 2、工厂方法创建一类功能的对象 2.7 责任链 责任链稳定点请求按照链条传递处理可打断变化点链结构的节点个数处理顺序处理条件代码结构实现构造链表关系的静态接口单个节点需要实现的功能处理请求的功能块实现链式的关系实现功能传递符合的设计规则组合\继承:组合优于继承面向接口接口依赖如何扩展代码修改静态创建接口实现处理接口 2.8 修饰器模式 2.9 组合模式