设计模式
设计模式介绍
设计模式:
- 系统服务设计中针对场景的一种解决方案,可以解决功能逻辑开发中的共性问题,并非所有问题
- 一种开发思想,每个设计模式都有解决某一类问题的概念模型,不要拘束于一种的固定的代码格式,要根据具体场景做出变化
- 同一种设计模式,不同场景,不同代码实现方式,以及不同开发人员去实现,都会有不同的代码方案
- 高内聚、低耦合和可复用的特点
- 在组件中使用比较频繁,比如:RPC框架,引擎的决策树等
- 主要通过实际案例来理解学习,不要只通过硬背概念,这样实际应用中存在问题
设计模式的类型:
创建型模式:
工厂方法模式(Factory Method Pattern) | 定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法模式使一个类的实例化延迟到其子类 |
---|---|
抽象工厂模式(Abstract Factory Pattern) | 提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类 |
生成器模式(Builder Pattern) | 将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示 |
原型模式(Prototype Pattern) | 用于创建重复的对象,同时又能保证性能。通过复制现有对象的实例来生成新对象 |
单例模式(Singleton Pattern) | 确保一个类只有一个实例,并提供一个全局访问点 |
结构型模式:
适配器模式(Adapter Pattern) | 将一个类的接口转换成客户端期望的另一个接口。适配器模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作 |
---|---|
代理模式(Proxy Pattern) | 为其他对象提供一种代理以控制对这个对象的访问。代理模式常用于实现延迟加载、权限控制等功能 |
桥接模式(Bridge Pattern) | 将抽象部分与它的实现部分分离,使它们可以独立变化。桥接模式主要用于处理多维度变化的场景 |
组合模式(Composite Pattern) | 将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得客户端对单个对象和组合对象的使用具有一致性 |
装饰器模式(Decorator Pattern) | 动态地给一个对象添加一些额外的职责,装饰模式相比生成子类更灵活。它是继承关系的一个替代方案 |
外观模式(Facade Pattern) | 提供一个统一的接口,用来访问子系统中的一群接口。外观模式定义了一个高层接口,使子系统更易于使用 |
享元模式(Flyweight Pattern) | 通过共享技术来有效地支持大量细粒度对象的复用,以减少内存使用和提高性能 |
行为模式:
责任链模式(Chain of Responsibility Pattern) | 为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止 |
---|---|
命令模式(Command Pattern) | 将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作 |
迭代器模式(Iterator Pattern) | 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露其内部表示。迭代器模式可以有效地遍历集合对象而无需暴露其内部结构 |
中介者模式(Mediator Pattern) | 用于减少对象之间的直接交互,而是通过一个中介对象来协调对象之间的交互 |
备忘录模式(Memento Pattern) | 在不破坏封装性的前提下捕获和恢复对象的内部状态。备忘录模式通常用于需要实现撤销操作或者历史记录功能的场景,它允许我们保存对象的状态,并在需要时将其恢复到之前的状态 |
观察者模式(Observer Pattern) | 定义对象间的一种一对多的依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都会得到通知并自动更新 |
状态模式(State Pattern) | 允许对象在内部状态改变时改变它的行为,对象看起来似乎修改了它的类 |
策略模式(Strategy Pattern) | 定义一系列算法,将每一个算法封装起来,并且使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户 |
模板方法模式(Template Method Pattern) | 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 |
访问者模式(Visitor Pattern) | 封装作用于某数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新操作 |
实际开发中用到较多的模式:
- 工厂方法模式
- 抽象工厂模式
- 单例模式
- 适配器模式
- 组合模式
- 代理模式
- 迭代器模式
- 策略模式
- 模板模式