飞雪连天射白鹿,笑书神侠倚碧鸳

0%

【23种设计模式】8桥接模式

描述:抽象和实现区分,且可以单独改变
优点:解耦,减少子类个数
缺点:需要识别独立变化的维度,有局限性

应用:继承过多导致类繁杂,转账分类,消息管理


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();
听说,打赏我的人最后都找到了真爱
↘ 此处应有打赏 ↙
// 用户脚本