From d238839fea79437e702933cd3cf2160a4a8f8a59 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Sat, 3 Mar 2018 11:35:37 +0800 Subject: [PATCH] auto commit --- notes/设计模式.md | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/notes/设计模式.md b/notes/设计模式.md index 05e51a1a..3debe7f3 100644 --- a/notes/设计模式.md +++ b/notes/设计模式.md @@ -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. 外观模式