主要点uff1a

1。适配器模式主要用于希望重用已有的类,但接口也与重用环境的要求不一致,这对遗留代码重用和类库迁移非常有用。

2。适配器模式有两种实现结构,对象适配器和类适配器,但是类适配器采用多重继承实现模式,这带来了很高的耦合,因此一般不推荐使用对象组合,对象适配器更符合松散耦合的精神。

实现uff1a



类适配器模式结构图(继承)





对象的适配器模式结构图(组合)

(对象适配器的代码实现)

目标:定义客户端使用的特定域相关接口。
公共接口目标{无效请求();}



受改造者:现在有一个现有的接口,需要适应
公共课受改造者{ public void(特定要求){ } }



适配器:适应受改造者和目标接口
公共类适配器实现目标{公共适配器(Adaptee Adaptee){超());this.adaptee =受改造者;} { } { };};



Applicability:

1。系统需要使用现有的类,这样的接口不能满足系统的需要。

2、我们希望建立一个可重用的类,用于与一些彼此不太相关的类,包括将来可能引入的一些类,这些源类不一定有非常复杂的接口。

3、对于对象适配器,在设计中,我们需要更改许多现有子类的接口。如果我们使用类的适配器模式,我们必须为每个子类做一个适配器,这是不实际的。

利弊:

对于类适配器:

1。与一个特定的适配器类受改造者和Taget的比赛,结果是,当我们想要匹配一个类和它的子类,该类适配器将无法工作。

2。使适配器可以重写(重新定义)对受改造者的行为的一部分,因为适配器是受改造者的子类。

对象适配器:

1。允许适配器多受改造者,这是工作的受改造者本身及其所有子类(如果有子类),适配器也可以在同一时间所有Adaptee添加功能。

2。对替代行为(重新定义)受改造者更难。如果我们必须重写受改造者的方法,必须首先使受改造者优先受改造者的子类,然后适应这类作为一个真正的受改造者的来源。