适配器
用于后期维护时解决兼容问题:将服务类的接口转为调用者期望的接口
类适配器
· 继承自服务类并实现调用者期望的接口,但适配器同时拥有了期望方法和原方法,违背迪米特原则
classDiagram
class SourceA {
+sourceServiceA() void
}
class SourceB {
+sourceServiceB() void
}
class Target {
<<interface>>
+targetService() void
}
class Adapter {
+sourceServiceA() void
+sourceServiceB() void
+targetService() void
}
Adapter ..|> Target : 实现
Adapter --|> SourceA : 继承
Adapter --|> SourceB : 继承
class Main
Main ..> Adapter : 实例化
对象适配器
· 组合服务类并实现调用者期望的接口
classDiagram
class SourceA {
+sourceServiceA() void
}
class SourceB {
+sourceServiceB() void
}
class Target {
<<interface>>
+targetService() void
}
class Adapter {
+targetService() void
}
Adapter ..|> Target : 实现
Adapter *-- SourceA : 构造器初始化成员
Adapter *-- SourceB : 构造器初始化成员
class Main
Main ..> SourceA : 实例化
Main ..> SourceB : 实例化
Main ..> Adapter : 实例化
接口适配器
· 上述例子是一个期望接口,若干服务类。这里要说的是让一个适配器实现多个需求类似的期望接口,以避免新增多个适配器
classDiagram
class SourceA {
+sourceServiceA() void
}
class SourceB {
+sourceServiceB() void
}
class TargetA {
<<interface>>
+targetServiceA() void
}
TargetA --|> Target : 继承
class TargetB {
<<interface>>
+targetServiceB() void
}
TargetB --|> Target : 继承
class Target {
<<interface>>
+targetServiceA() void
+targetServiceB() void
}
class Adapter {
+targetServiceA() void
+targetServiceB() void
}
Adapter ..|> Target : 实现
Adapter *-- SourceA : 构造器初始化成员
Adapter *-- SourceB : 构造器初始化成员
class Main
Main ..> SourceA : 实例化
Main ..> SourceB : 实例化
Main ..> Adapter : 实例化