适配器模式(Adapter Pattern)(二):HeadFirst中的火鸡冒充鸭子
来源:互联网 发布:python实现svm smo 编辑:程序博客网 时间:2024/04/30 04:40
一、问题描述
火鸡通过模仿鸭子走路的姿势、叫的声音以及飞行就可以将自己伪装成一只鸭子,当我们缺少鸭子对象时,就可以使用一些火鸡对象来冒充鸭子对象,但是我们还必须编写一个接口,使一只火鸡可以通过这个接口(即适配器)装换成一只鸭子。
我们可以写一个对象适配器或类适配器将火鸡适配成鸭子。
二、类图
三、代码实现
1.Duck,鸭子的父接口
public interface Duck {public void quack();public void fly();}
2.Turkey,火鸡的父接口
public interface Turkey {public void gobble();public void fly();}
3.具体鸭子MallardDuck
public class MallardDuck implements Duck {public void quack() {System.out.println("Quack");} public void fly() {System.out.println("I'm flying");}}
4.具体火鸡WildTurkey
public class WildTurkey implements Turkey {public void gobble() {System.out.println("Gobble gobble");} public void fly() {System.out.println("I'm flying a short distance");}}
5.火鸡适配器TurkeyAdapter(对象适配器)
public class TurkeyAdapter implements Duck {Turkey turkey; public TurkeyAdapter(Turkey turkey) {this.turkey = turkey;} public void quack() {turkey.gobble();} public void fly() {for(int i=0; i < 5; i++) {//鸭子比火鸡飞的远,所以火鸡得连续多次飞行才能冒充鸭子的飞行行为turkey.fly();}}}
6.测试
public class DuckTestDrive {public static void main(String[] args) {MallardDuck duck = new MallardDuck(); WildTurkey turkey = new WildTurkey();Duck turkeyAdapter = new TurkeyAdapter(turkey); System.out.println("The Turkey says...");turkey.gobble();turkey.fly(); System.out.println("\nThe Duck says...");testDuck(duck); System.out.println("\nThe TurkeyAdapter says...");testDuck(turkeyAdapter);} static void testDuck(Duck duck) {duck.quack();duck.fly();}}
说明:
同样,我们也可以写一个鸭子适配器让鸭子类冒充火鸡。但是,当我们想写一个双向适配器以便鸭子和火鸡可以双向适配时,就会遇到一个问题:我们所写的适配器类要实现Duck和Turkey接口,而这两个接口中声明了相同的方法fly(),这时在适配器类中只有一个fly()方法,就无法适配两者的飞行行为。
转载请注明出处:http://blog.csdn.net/jialinqiang/article/details/8886567
- 适配器模式(Adapter Pattern)(二):HeadFirst中的火鸡冒充鸭子
- 适配器模式-如何把火鸡变成鸭子
- 策略模式(Strategy Pattern)(二):HeadFirst中鸭子的实现
- 适配器模式(Adapter Pattern)
- 适配器模式(Adapter Pattern)
- 适配器模式(Adapter Pattern)
- 适配器模式(Adapter Pattern)
- 适配器模式(Adapter Pattern)
- 适配器模式(Adapter Pattern)
- 适配器模式(Adapter Pattern)
- 适配器模式(Adapter Pattern)
- 适配器模式(Adapter Pattern)
- 适配器模式(Adapter Pattern)
- 适配器模式(Adapter Pattern)
- 适配器模式(Adapter pattern)
- 适配器模式(Adapter Pattern)
- 适配器模式(Adapter Pattern)
- 适配器模式(Adapter Pattern)
- Water(过半元素)
- fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- Win下Mysql根治ERROR 1045 (28000): Access denied for user的方法(绝对有效)
- EHCache配置参数说明
- 实战Nginx_取代Apache的高性能Web服务器
- 适配器模式(Adapter Pattern)(二):HeadFirst中的火鸡冒充鸭子
- ubuntu更改系统主机名
- HDU 1788 中国剩余定理
- android 如何设置背景的透明度
- 初探Tomcat源码 (3) —— SimpleHttpServer
- WebSphere Process Server V7 集群 - 经典拓扑模型
- 杨辉三角
- 每天一点Linux
- opencv学习之(三)-LBP算法的研究及其实现