描述:抽象和实现区分,且可以单独改变
优点:解耦,减少子类个数
缺点:需要识别独立变化的维度,有局限性
应用:继承过多导致类繁杂,转账分类,消息管理
classDiagram
class Implementor{
doSomething() void
doAnything() void
}
class ConcreteImplementor{
+doSomething() void
+doAnything() void
}
class Abstraction{
<>
-imp: Implementor
constructor(imp : Implementor)
+request() void
}
class RefinedAbstraction{
constructor(imp : Implementor)
+request() void
}
Implementor <|.. ConcreteImplementor :接口实现
Abstraction o-- Implementor :聚合
Abstraction <|-- RefinedAbstraction :抽象类继承
- 接口定义某角色要做的事情
- 抽象类,聚合这个角色接口
- 实例化具体类
- 对实例的功能进行抽象,得到新实例
- 调用新实例的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| interface Implementor { doSomething() : void; doAnything() : void; }
class ConcreteImplementor1 implements Implementor { public doSomething() : void {} public doAnything() : void {} } class ConcreteImplementor2 implements Implementor { public doSomething() : void {} public doAnything() : void {} }
abstract class Abstraction { private imp : Implementor; constructor(imp : Implementor) { this.imp = imp; } public request() : void { this.imp.doSomething(); } }
class RefinedAbstraction extends Abstraction { constructor(imp : Implementor) { super(imp); } public request() : void { super.request(); } }
const imp : Implementor = new ConcreteImplementor1();
const abs : Abstraction = new RefinedAbstraction(imp);
abs.request();
|