auto commit
This commit is contained in:
parent
a8970e7093
commit
d238839fea
@ -830,8 +830,11 @@ public class Singleton {
|
||||
**3. 解决方案类图**
|
||||
|
||||
- RemoteControl 是遥控器,它可以为每个按钮设置命令对象,并且调用命令对象的 execute() 方法。
|
||||
|
||||
- Command 就是命令对象,命令模式正式将各种命令封装成 Commad 对象来实现的。
|
||||
|
||||
- Light 是命令真正的执行者。可以注意到 LightOnCommand 和 LightOffCommand 类组合了一个 Light 对象,通过组合的方法,就可以将 excute() 方法委托给 Light 对象来执行。
|
||||
|
||||
- RemoteLoader 是客户端,注意它与 RemoteControl 的区别。因为 RemoteControl 不能主动地调用自身的方法,因此也就不能当成是客户端。客户端好比人,只有人才能去真正去使用遥控器。
|
||||
|
||||
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics//5ef94f62-98ce-464d-a646-842d9c72c8b8.jpg)
|
||||
@ -931,7 +934,7 @@ Light is on!
|
||||
|
||||
**2. 模式类图**
|
||||
|
||||
有两种适配器模式的实现,一种是对象方式,一种是类方式。对象方式是通过组合的方法,让适配器类(Adapter)拥有一个待适配的对象(Adaptee),从而把相应的处理委托给待适配的对象。类方式用到多重继承,Adapter 可以看成 Target 和 Adaptee 类型,先把它当成 Adaptee 类型然后实例化一个 Adapter 对象,再把它当成 Target 类型的,这样 Client 就可以把这个对象当成 Target 的对象来处理。
|
||||
有两种适配器模式的实现,一种是对象方式,一种是类方式。对象方式是通过组合的方法,让适配器类(Adapter)拥有一个待适配的对象(Adaptee),从而把相应的处理委托给待适配的对象。类方式用到多重继承,Adapter 继承 Target 和 Adaptee,先把 Adapter 当成 Adaptee 类型然后实例化一个对象,再把它当成 Target 类型的,这样 Client 就可以把这个对象当成 Target 的对象来处理,同时拥有 Adaptee 的方法。
|
||||
|
||||
![](https://github.com/CyC2018/InterviewNotes/blob/master/pics//253bd869-ea48-4092-9aed-6906ccb2f3b0.jpg)
|
||||
|
||||
@ -939,7 +942,9 @@ Light is on!
|
||||
|
||||
**3. 问题描述**
|
||||
|
||||
让鸭子(Duck)适配火鸡(Turkey),Duck 有 quack() 方法,而 Turkey 只有 gobble() 方法。也就是要让 Turkey 也有 Duck 的 quack() 方法。
|
||||
鸭子(Duck)和火鸡(Turkey)拥有不同的叫声,Duck 调用的是 quack() 方法,而 Turkey 调用 gobble() 方法。
|
||||
|
||||
要求将 Turkey 的 gobble() 方法适配成 Duck 的 quack() 方法。
|
||||
|
||||
**4. 解决方案类图**
|
||||
|
||||
@ -950,28 +955,24 @@ Light is on!
|
||||
```java
|
||||
public interface Duck {
|
||||
public void quack();
|
||||
public void fly();
|
||||
}
|
||||
```
|
||||
|
||||
```java
|
||||
public interface Turkey {
|
||||
public void gobble();
|
||||
public void fly();
|
||||
}
|
||||
```
|
||||
|
||||
```java
|
||||
public class WildTurkey implements Turkey{
|
||||
@Override
|
||||
public void gobble() {
|
||||
System.out.println("gobble!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fly() {
|
||||
System.out.println("fly!");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
```java
|
||||
public class TurkeyAdapter implements Duck{
|
||||
Turkey turkey;
|
||||
@ -984,28 +985,23 @@ public class TurkeyAdapter implements Duck{
|
||||
public void quack() {
|
||||
turkey.gobble();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fly() {
|
||||
turkey.fly();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
```java
|
||||
public class DuckTestDrive {
|
||||
public static void main(String[] args) {
|
||||
Turkey turkey = new WildTurkey();
|
||||
Duck duck = new TurkeyAdapter(turkey);
|
||||
duck.quack();
|
||||
duck.fly();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
运行结果
|
||||
|
||||
```html
|
||||
gobble!
|
||||
fly!
|
||||
```
|
||||
|
||||
## 2. 外观模式
|
||||
|
Loading…
x
Reference in New Issue
Block a user