设计模式 <行为型> | 模版模式 模版模式(Template Method)模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。 算法可以理解为业务逻辑,并不特指数据结构和算法中的算法。这里的算法骨架就是模板,包含算法骨架的方法就是模板方法,这也是模板方法模式名字的由来。 结构图: 角色: 抽象类(AbstractClass): 定 2023-03-07 设计模式 #设计模式 #行为型
设计模式 <行为型> | 观察者模式 观察者模式(Observer Design Pattern)在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知,被依赖的对象叫作被观察者(Observable),依赖的对象叫作观察者(Observer)。 消息队列 事件总线 就是观察者模式。 结构图: 角色: 抽象主题(Subject):它把所有观察者对象的引用保存到一个聚集里,每个主题都可以有任何数量的观 2023-03-07 设计模式 #设计模式 #行为型
设计模式 <结构型型> | 享元模式 享元模式(Flyweight Design Pattern)享元模式的意图是复用对象,节省内存,当一个系统中存在大量重复对象的时候,就可以利用享元模式,将对象设计成享元,在内存中只保留一份实例,供多处代码引用,这样可以减少内存中对象的数量,以起到节省内存的目的。 享元模式把一个对象的状态分成内部状态和外部状态,常量数据称内在状态,其他对象只可以读取不可以修改。可以随着环境变动的称外部状态,外部状态 2023-03-06 设计模式 #设计模式 #结构型
设计模式 <结构型> | 组合模式 组合模式(Composite Design Pattern)组合模式将一组对象组织成树形结构,将单个对象和组合对象都看做树中的节点,以统一处理逻辑,并且它利用树形结构的特点,递归地处理每个子树,依次简化代码实现。 结构图: 角色: 抽象节点(Component): 透明模式下把所有行为都再放抽象节点中,让不同层次的结构都具备一致行为 安全组合模式是只规定各个节点的最基础的一致行为,而把组合节点的 2023-03-02 设计模式 #设计模式 #结构型
设计模式<结构型> | 外观模式 外观模式/门面模式(Facade Pattern)门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。 假设有一个系统 A,提供了 a、b、c、d 四个接口。系统 B 完成某个业务功能,需要调用 A 系统的 a、b、d 接口。利用门面模式,我们提供一个包裹 a、b、d 接口调用的门面接口 x,给系统 B 直接使用 门面模式可以用来封装系统的底层实现,隐藏系统的复杂性,提供一组更 2023-03-02 设计模式 #设计模式 #结构型
设计模式<结构型> | 适配器模式 适配器模式(Adapter Pattern)将不兼容的接口转换成可以兼容的接口,有一个经常被拿来解释它的例子,就是 USB 转接头充当适配器,把两种不兼容的接口,通过转接变得可以一起工作。 结构图: 角色: 目标(Target),定义把其他类转换为哪种接口。 源目标(Adaptee),需要被适配的类。 适配器(Adapter),通过继承或是类关联的方式把源角色转换为目标角色。 适用场景: 封 2023-03-02 设计模式 #设计模式 #结构型
设计模式<结构型> | 装饰器模式 装饰器模式(Proxy Pattern)通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。装饰器模式主要解决继承关系过于复杂的问题,通过组合来替代继承。它主要的作用是给原始类添加增强功能。这也是判断是否该用装饰器模式的一个重要的依据。除此之外,装饰器模式还有一个特点,那就是可以对原始类嵌套使用多个装饰器。为了满足这个应用场景,在设计的时候,装饰器类需要跟原始类继承相同的抽象类或者接口。 2023-03-01 设计模式 #设计模式 #结构型
设计模式<结构型> | 桥接模式 桥接模式(Bridge Pattern)桥接模式也叫桥梁模式,将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构, 从而能在开发时分别使用。 结构图: 角色: 抽象类(Abstract):定义抽象类,提供高层控制逻辑,并包含一个对实现对象的引用。 扩展抽象类(Refined Abstraction):扩展Abstract中的接口定义。通常情况下它不再是抽象类而是具体类,实现了在 A 2023-02-28 设计模式 #设计模式 #结构型
设计模式<结构型> | 代理模式 代理模式(Proxy Pattern)在不改变原始类(或叫被代理类)的情况下,通过引入代理类来给原始类附加功能。一般情况下,让代理类和原始类实现同样的接口。但是,如果原始类并没有定义接口,并且原始类代码并不是自己开发维护的。在这种情况下,可以通过让代理类继承原始类的方法来实现代理模式。 结构图: 角色: 原始主题(RealSubject):也就是需要被代理的类。 抽象主题(ISubject):真 2023-02-28 设计模式 #设计模式 #结构型
设计模式<创建型> | 原型模式 原型模式(Prototype Pattern)如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,就可以可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式,来创建新对象,以达到节省创建时间的目的。这种基于原型来创建对象的方式就叫作原型设计模式,简称原型模式。 结构图: 角色: 原型对象(prototype):需要进行复制的对象。 适用场景: 需 2023-02-27 设计模式 #设计模式 #创建型