设计模式-结构型-代理模式(Proxy)
参考文献
https://refactoringguru.cn/design-patterns/proxy
https://www.oodesign.com/proxy-pattern
代理模式
让你能够提供对象的替代品或其占位符. 代理控制着对于原对象的访问, 并允许在将请求提交给对象前后进行一些处理.
组件
抽象主题(Subject): 定义了真实主题和代理主题之间的共同接口,客户端通过该接口访问真实主题.
真实主题(Real Subject): 定义了真实对象的具体业务逻辑.代理对象通过调用真实主题来完成实际的操作.
代理主题(Proxy Subject): 实现了抽象主题接口,并在其内部维护了一个引用,指向真实主题对象.代理主题负责控制对真实主题对象的访问,并且可以在真实主题的基础上增加额外的功能,如权限验证、缓存等.
客户端(Client): 通过抽象主题接口与代理主题进行交互.客户端不需要知道真实主题的存在,只需要通过代理主题完成相应的操作.
实现方式
定义抽象主题接口: 首先,需要定义一个抽象主题接口,该接口定义了真实主题和代理主题之间的共同方法.
123 ...
设计模式-结构型-外观模式(Facade)
参考文献
https://refactoringguru.cn/design-patterns/facade
https://java-design-patterns.com/patterns/facade/
外观模式
能为程序库、 框架或其他复杂类提供一个简单的接口
组件
外观(Facade):外观对象是客户端与子系统之间的接口,它封装了子系统的复杂性,提供了一个简化的接口供客户端使用.
子系统(Subsystems):子系统是一组相关的类或接口,它们实现了系统的各个功能.子系统可以包含多个类和层次结构,但是通过外观对象,客户端只需要与外观对象进行交互,而不需要直接与子系统的各个类打交道.
客户端(Client):客户端是使用外观模式的对象.它通过外观对象来访问子系统的功能,而不需要了解子系统的具体实现.
实现方式
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748// 子系统类:库存管理系统class InventorySystem { ...
设计模式-结构型-装饰器模式(Decorator)
参考文献
https://www.oodesign.com/decorator-pattern
https://refactoringguru.cn/design-patterns/decorator
装饰器模式
此模式的目的是向对象动态添加额外的职责.
组件
抽象组件(Component): 定义了被装饰对象的接口,可以是抽象类或接口.它通常声明了核心的操作方法.
具体组件(ConcreteComponent): 实现了抽象组件接口,是被装饰的原始对象.具体组件是装饰器模式的核心.
抽象装饰器(Decorator): 也是抽象组件的实现类,它持有一个抽象组件对象作为成员变量,并通过构造函数或setter方法进行注入.
具体装饰器(ConcreteDecorator): 继承自抽象装饰器,实现了抽象组件的接口,并在其中添加额外的功能.具体装饰器可以对抽象组件进行装饰,即包装一个具体组件对象,并在调用核心功能方法前后增加额外的行为.
实现方式
定义抽象组件(Component)接口,声明需要被装饰的核心功能方法.
123interface Report { ...
设计模式-结构型-桥接模式(Bridge)
参考文献
https://www.oodesign.com/bridge-pattern
https://refactoringguru.cn/design-patterns/bridge
图解设计模式 结城浩
桥接模式
Bridge的意思是"桥梁".桥梁的功能是将河流的两侧连接起来一样,Bridge模式作用也是将两样东西连接起来,它们分别是类的功能层次结构和类的实现层次结构.
类的功能层次结构
希望增加新功能时,假设现在有一个类Something.当我们想在Something中增加新功能(想增加一个具体方法时),会编写一个Something类的子类(派生类),即SomethingGood类.这样就构成了一个小小的类层次结构.
12Something |- SomethingGood
这就是为了增加新功能而产生的层次结构
父类具有基本功能
在子类中增加新的功能
以上这种层次结构被称为"类的功能层次结构"
类的实现层次结构
希望增加新的实现时,抽象类声明了一些抽象方法,定义了接口(API),然后子类负责去实现这些抽 ...
设计模式-结构型-享元模式(Flyweight)
参考文献
https://refactoringguru.cn/design-patterns/flyweight
https://www.oodesign.com/flyweight-pattern
享元模式
它摒弃了在每个对象中保存所有数据的方式, 通过共享多个对象所共有的相同状态, 让你能在有限的内存容量中载入更多对象.
此模式的目的是使用共享来支持大量对象,这些对象的内部状态的一部分是相同的,而状态的其他部分可能会有所不同.
组件
Flyweight: 声明一个接口,通过该接口,flyweight 可以接收外部状态并对其进行操作
ConcreteFlyweight: 实现 Flyweight 接口并存储内在状态. ConcreteFlyweight 对象必须是可共享的.具体的享元对象必须维持其固有的状态,并且必须能够操纵外在的状态
FlyweightFactory: 工厂创建和管理 Flyweight 对象.此外,工厂还确保享元对象的共享.工厂维护一个不同的享元对象池,如果已经创建了对象,则从池中返回一个对象;如果是新对象,则向池中添加一个对象并返回该对象
Cli ...
设计模式-结构型-适配器模式(Adapter)
参考文献
https://www.oodesign.com/adapter-pattern
https://refactoringguru.cn/design-patterns/adapter
适配器模式
将一个类的接口转换为客户期望的另一个接口.
适配器让类能够协同工作,否则由于接口不兼容而无法协同工作
分类
对象适配器
对象适配器使用组合关系,在适配器类中持有一个对于被适配者类的引用,并实现目标接口的方法,通过调用被适配者类的方法来完成任务.
类适配器
类适配器使用继承关系,在适配器类中同时继承目标接口和被适配者类,并实现目标接口的方法.
组件
Target 定义客户端使用的特定于域的接口
Adapter 使接口适配者适应目标接口
Adaptee 定义需要调整的现有接口
Client 与符合 Target 接口的对象协作
实现方式
定义目标接口(Target Interface): 这是适配器的目标,即客户端所期望使用的接口.它可以是一个新的接口或者是已有的接口.
123public interface Payment { ...
设计模式-结构型-组合模式(Composite)
参考文献
https://www.oodesign.com/composite-pattern
https://refactoringguru.cn/design-patterns/composite
组合模式
允许将对象组织成树形结构,以表示“整体-部分”层次关系,并且能够以统一的方式处理单个对象和组合对象.
组件
组件(Component):抽象类或接口,定义了组合中所有对象共有的操作,可以是抽象类或接口.它可以包含对子组件进行管理的方法,比如添加、删除、获取子组件等.
叶子节点(Leaf):代表组合中的叶子对象,叶子节点没有子节点,实现了组件的操作方法.
容器节点(Composite):代表组合中的容器对象,可以包含子节点,实现了组件的操作方法.容器节点可以存储叶子节点和其他容器节点,形成树形结构.
客户端(Client):使用组合模式的外部代码,通过组件接口操作组合对象.客户端通常无法区分处理的是单个对象还是组合对象,因为它们都遵循同样的接口
实现方式
使用抽象类或接口定义组件(Component),其中包含对子组件的管理方法,如添加、删除、获取子组件等.
创建叶 ...