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

0%

【23种设计模式】7适配器模式

描述:将一个类的接口变换为另一个,匹配两个不同类
优点:提高类的复用性
缺点:类适配器的适配者需要暴露方法,对象适配器替换时麻烦

应用:接口不规范的类进行转换,使用接口中的部分方法


类适配器

classDiagram
  class Target{
    <>
    request() void
  }
  class Adaptee{
    constructor()
    +specificRequest() void
  }
  class Adapter{
    constructor()
    +request() void
  }
  Target <|.. Adapter:实现
  Adaptee <|-- Adapter:继承
  • 目标对象接口
  • 被适配者类
  • 适配器,用来继承类、实现接口
  • 实例调用的是被适配者类的逻辑
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 目标对象
interface Target {
request() : void;
}
// 被适配者
class Adaptee {
constructor() {}
// 这是源角色,有自己的的业务逻辑
public specificRequest() : void {}
}
// 适配器
class Adapter extends Adaptee implements Target {
constructor() {
super();
}
public request() : void {
super.specificRequest();
}
}
const target : Target = new Adapter();
target.request();

对象适配器

classDiagram
  class Target{
    <>
    request() void
  }
  class Adaptee{
    constructor()
    +specificRequest() void
  }
  class Adapter{
    -adaptee: Adaptee
    constructor(adaptee : Adaptee)
    +request() void
  }
  Target <|.. Adapter:实现
  Adaptee --o Adapter:聚合
  • 目标对象接口
  • 被适配者类
  • 适配器,用来实现接口,被适配者类私有化
  • 通过适配器传入实例的方式进行实例化,并调用相关方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 目标对象
interface Target {
request() : void;
}
// 被适配者
class Adaptee {
constructor() {}
// 这是源角色,有自己的的业务逻辑
public specificRequest() : void {}
}
// 适配器
class Adapter implements Target {
private adaptee : Adaptee;
constructor(adaptee : Adaptee) {
this.adaptee = adaptee;
}
public request() : void {
this.adaptee.specificRequest();
}
}
// 使用
const target : Target = new Adapter(new Adaptee());
target.request();

接口适配器

classDiagram
  class Adaptee{
    <>
    operation1() void
    operation2() void
  }
  class AbsAdapter{
    +operation1() void
    +operation2() void
  }
  class UseClass{
    operation1() void
  }
  Adaptee <|.. AbsAdapter :实现
  AbsAdapter <.. UseClass :依赖
  • 目标对象接口
  • 被适配者类,实现目标对象接口
  • 新的类,重写适配者类的函数内容
1
2
3
4
5
6
7
8
9
10
11
interface Adaptee {
operation1() : void;
operation2() : void;
}
abstract class AbsAdapter implements Adaptee {
public operation1() : void {}
public operation2() : void {}
}
class UseClass extends AbsAdapter {
public operation1() : void {}// 重写该类
}
听说,打赏我的人最后都找到了真爱
↘ 此处应有打赏 ↙
// 用户脚本