博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之七:适配器模式(火鸡转换成鸭子)
阅读量:5076 次
发布时间:2019-06-12

本文共 2796 字,大约阅读时间需要 9 分钟。

适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

适配器分为:1)"对象"适配器;下面例子就是对象适配器。

                2)"类"适配器。

两者区别:对象适配器采用的是组合方法;

             类适配器采用的是继承方法。

适配者与装饰者区别:适配器将一个对象包装起来以改变其接口;

                          装饰者将一个对象包装起来以增加新的行为和责任。

工程名称:TurkeyAdapter 下载目录: , TurkeyAdapter.zip

1 package com.jyu.duck; 2  3 /** 4  * 鸭子接口 5  * @author JRSmith 6  * 7  */ 8 public interface Duck { 9 10     public void quack();11     public void fly();12 }
1 package com.jyu.duck; 2  3 /** 4  * 绿头鸭 5  */ 6 public class MallardDuck implements Duck { 7  8     @Override 9     public void quack() {10         System.out.println("Quack...");11     }12 13     @Override14     public void fly() {15         System.out.println("Fly...");16     }17 18 }
1 package com.jyu.turkey; 2  3 /** 4  * 火鸡接口 5  * @author JRSmith 6  * 7  */ 8 public interface Turkey { 9 10     public void gobble();11     public void fly();12 }
package com.jyu.turkey;/** * 火鸡 * @author JRSmith * */public class WildTurkey implements Turkey {    @Override    public void gobble() {        System.out.println("Gobble...");    }    @Override    public void fly() {        System.out.println("I'm flying a short distance...");    }}
1 package com.jyu.adapter; 2  3 import com.jyu.duck.Duck; 4 import com.jyu.turkey.Turkey; 5  6 /** 7  * 将火鸡转换成鸭子 8  * @author JRSmith 9  *10  */11 public class TurkeyAdapter implements Duck {
//首先,你需要实现想转换成的类型接口,也就是你的客户所期望看到的接口。12 13 Turkey turkey;//被适配者14 15 public TurkeyAdapter(Turkey turkey) {
//接着,需要取得要适配的对象引用,这里我们利用构造器取得这个引用。16 this.turkey = turkey;17 }18 19 @Override20 public void quack() {21 turkey.gobble();//现在我们需要实现接口中所有的方法。quack()在类之间的转换很简单,只要调用gobble()就可以了。22 }23 24 @Override25 public void fly() {26 for(int i=5; i>0; i--){27 turkey.fly();28 }29 }30 31 }
package com.jyu.test;import com.jyu.adapter.TurkeyAdapter;import com.jyu.duck.Duck;import com.jyu.duck.MallardDuck;import com.jyu.turkey.WildTurkey;public class DuckTestDrive {    /**     * @param args     */    public static void main(String[] args) {        MallardDuck mallarDuck = new MallardDuck();//先创建一个鸭子                WildTurkey wildTurkey = new WildTurkey();//创建一个火鸡                Duck turkeyAdapter = new TurkeyAdapter(wildTurkey);//然后将火鸡包装进一个火鸡适配器中,使它看起来像一只鸭子。                System.out.println("The Turkey says...");//测试这只火鸡        wildTurkey.gobble();        wildTurkey.fly();                System.out.println("\n The Duck says...");//调用testDuck()方法来测试鸭子,这个方法需要传入一个鸭子对象        testDuck(mallarDuck);                System.out.println("\n The TurkeyAdapter says...");//我们试着传入一个假装是鸭子的火鸡        testDuck(turkeyAdapter);            }        public static void testDuck(Duck duck) {        duck.quack();        duck.fly();    }}

转载于:https://www.cnblogs.com/damonhuang/archive/2012/10/04/2711643.html

你可能感兴趣的文章
就用户界面和体验评价搜狗输入法
查看>>
vue分页组件火狐中出现样式问题
查看>>
数组的模3特性
查看>>
自动刷新 CSS文件
查看>>
利用easy_install 工作效率提升起来
查看>>
git
查看>>
Java并发编程:线程及同步的性能——线程池
查看>>
总结前端开发模式和规范 1、jshint 详解
查看>>
java数据结构学习总结--1
查看>>
JAVA多线程提高九:Semaphere同步工具
查看>>
小程序request请求 POST请求参数传递不到后台
查看>>
bzoj 1201[HNOI2005]数三角形 1202 [HNOI2005]狡猾的商人 暴力 权值并查集
查看>>
Ruby正则表达式编辑器
查看>>
如何建立一个样式新颖的CSS3搜索框
查看>>
免费资源:350个超棒标志性字符图标
查看>>
(转载)C++ ofstream和ifstream详细用法
查看>>
mktemp 命令
查看>>
linux生成多对秘钥并指定秘钥登录
查看>>
English Study Plan
查看>>
C#对注册表的操作
查看>>