设计模式-结构型-代理模式(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 { ...
设计模式-行为型-中介者模式(Mediator)
参考文献
https://www.oodesign.com/mediator-pattern
https://refactoringguru.cn/design-patterns/mediator
中介者模式
定义一个对象来封装一组对象如何交互。中介器通过防止对象显式地相互引用来促进松散耦合,并且它允许您独立地改变它们的交互。
中介器通过强制类的通信流通过中介对象来解耦一组类。
组件
Mediator- 定义与 Colleague 对象通信的接口。
ConcreteMediator - 了解Colleague 类并保留对Colleague 对象的引用。
实现Colleague类之间的通信和消息传递
Colleague classes- 保留对其 Mediator 对象的引用
每当它本来可以与其他Colleague进行通信时,就与调解器进行通信。
实现方式
确定需要解耦的一组当前紧密耦合的类,这些类之间存在复杂的交互关系。
声明一个中介者接口,并在该接口中描述中介者和各个组件之间所需的交流接口。通常情况下,一个接收组件通知的方法就足够了。
实现具体的中介者类,该 ...
设计模式-创建型-解释器模式(Interpreter)
参考文献
https://www.oodesign.com/interpreter-pattern
解释器模式
用于将特定语言或问题领域的表达式转换为可执行的代码.它包括一个上下文对象、抽象表达式和具体表达式.
解释器模式的应用范围有限.此模式可应用于解析简单语法中定义的轻量表达式,有时也可应用于简单规则引擎中定义的轻量表达式.
组件
上下文(Context):上下文对象保存解释器的全局信息和状态,它在解释过程中提供解释器需要的环境变量和数据.
抽象表达式(Abstract Expression):抽象表达式定义了一个通用的解释操作接口,该接口通常包括一个 interpret() 方法,用于解释表达式.
终结符表达式(Terminal Expression):终结符表达式是抽象表达式的子类,它代表语法规则中的终结符,也就是不再可以进一步解释的最小元素.终结符表达式通常是解释器模式的叶节点.
非终结符表达式(Nonterminal Expression):非终结符表达式是抽象表达式的子类,它代表语法规则中的非终结符,也就是可以进一步解释的元素.非终结符表达式通常包含其他 ...
设计模式-行为型-观察者模式(Observer)
参考文献
https://refactoringguru.cn/design-patterns/observer
https://www.oodesign.com/observer-pattern
https://java-design-patterns.com/patterns/observer/
观察者模式
定义对象之间的一对多依赖关系,以便当一个对象更改状态时,其所有依赖项都会收到通知并自动更新.
Model View Controller Pattern: 观察者模式用于模型视图控制器 (MVC) 架构模式.在 MVC 中,此模式用于将模型与视图解耦. View代表观察者,模型是Observable对象
Event management: 这是广泛使用观察者模式的领域之一. Swing 和.Net 广泛使用观察者模式来实现事件机制.
组件
Observable(Publisher): 定义将观察者附加到客户端和取消附加到客户端的操作的接口或抽象类.
ConcreteObservable: 具体的Observable类.它维护对象的状态,当状态发生变化时,它会通知附加的 ...
设计模式-行为型-迭代器模式(Iterator)
参考文献
https://www.oodesign.com/iterator-pattern
https://refactoringguru.cn/design-patterns/iterator
https://java-design-patterns.com/patterns/iterator/
图解设计模式 结城浩
迭代器模式
迭代器模式的思想是负责访问和传递集合的对象并将其放入迭代器对象中.迭代器对象将维护迭代的状态,跟踪当前项并具有识别下一个要迭代的元素的方法.
提供一种顺序访问聚合对象的元素而不暴露其底层表示的方法.
迭代器模式提供的抽象允许您修改集合实现,而无需在集合之外进行任何更改
组件
Iterator(迭代器) : 负责定义按顺序逐个遍历元素的接口.
ConcreteIterator(具体的迭代器) : 负责实现Iterator角色所定义的接口
Collection(集合) : 负责定义创建Iterator角色的接口.
ConcreteCollection(具体的集合) : 负责实现Collection角色所定义的接口.
实现方式
声明迭代器接 ...