设计模式-结构型-桥接模式(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角色所定义的接口.
实现方式
声明迭代器接 ...
设计模式-行为型-策略模式(Strategy)
参考文献
https://www.oodesign.com/strategy-pattern
https://java-design-patterns.com/patterns/strategy/
https://refactoringguru.cn/design-patterns/strategy
策略模式
定义一系列算法,封装每个算法,并使它们可以互换.策略使算法能够独立于使用它的客户端而变化.
组件
Strategy(策略): 定义所有支持的算法通用的接口. Context 使用此接口来调用 ConcreteStrategy 定义的算法.
ConcreteStrategy(具体策略): 每个具体策略都实现一个算法.它们实现了 Strategy 接口定义的方法,提供了不同的算法实现
Context(上下文)
包含对策略对象的引用.
可以定义一个接口,让策略访问其数据.
Context 对象包含对应使用的ConcreteStrategy 的引用.当需要执行操作时,算法将从策略对象运行.上下文不知道策略的实施.如有必要,可以定义附加对象以将数据从上下文对象传递到策略.
...
设计模式-行为型-备忘录模式(Memento)
参考文献
https://www.oodesign.com/memento-pattern
https://java-design-patterns.com/patterns/memento/
https://refactoringguru.cn/design-patterns/memento
备忘录模式
允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态.
组件
Memento 备忘录
存储 Originator对象的内部状态.状态可以包括任意数量的状态变量.
备忘录必须具有两个接口,一个接口用于负责人(Caretaker).这个接口不能允许任何操作或者访问备忘录存储的内部状态,从而遵循封装原则.另一个接口用于原发器(Originator),允许原发器访问任何必要的状态变量以恢复先前的状态
Originator 原发器
创建一个备忘录对象,用于捕获原发器的内部状态.
使用备忘录对象来恢复先前的状态.
Caretaker 负责人
负责保持备忘录.
备忘录对于负责人来说是不透明的,而负责人不能对其进行操作.
实现方式
确定担任原发器角色的类取决于你的 ...
设计模式-行为型-状态模式(State)
参考文献
https://refactoringguru.cn/design-patterns/state
https://java-design-patterns.com/patterns/state/
状态模式
允许对象在其内部状态发生变化时改变其行为
组件
状态接口(State Interface):定义了表示各种状态的方法,具体状态类必须实现该接口.
具体状态类(Concrete State Class):实现了状态接口的具体状态类,每个具体状态类负责处理特定的状态下的行为.
上下文类(Context Class):维护一个对当前状态对象的引用,提供了用于切换状态和执行相应操作的方法.
环境类状态切换方法(Transition Methods in Context Class):在上下文类中提供了用于切换状态的方法,允许客户端自行决定何时切换状态.
共享状态(Shared State):多个上下文对象共享同一个状态对象的情况.这种情况下,可以将状态对象设计成可共享的,以减少对象的创建和内存占用.
实现方式
定义状态接口(State Interface):创 ...