适配器模式
来源:互联网 发布:windows 32位升级64位 编辑:程序博客网 时间:2024/06/06 02:05
适配器模式可以将一个类的接口转换成客户希望的另一个接口。当然,前提是这个类有能力实现客户希望的那些功能,否则转换毫无意义。
现假设有一个Duck接口,它只要两个方法,定义如下:
package Adaptor;/** * Created by sgzhang on 2015/8/17. */public interface Duck { void quack(); void fly();}
但是手上只有一只Turkey。它的代码如下:
//首先是Turkey的接口
package Adaptor;/** * Created by sgzhang on 2015/8/17. */public interface Turkey { void gobble(); void fly();//MallarTurkey是Turkey的一种,代码如下:
package Adaptor;/** * Created by sgzhang on 2015/8/17. */public class MallarTurkey implements Turkey { @Override public void gobble() { System.out.println("咕咕叫!"); } @Override public void fly() { System.out.println("飞一点点远!"); }}我们需要用一只Turkey去冒充Duck,因此要将Turkey的方法适配成Duck的方法。
首先是叫,Duck的是quack(),显然只需要在适配器中的quack()方法内调用gobble()就可以了。
接着是飞,Duck和Turkey都有这个方法,所不同的是鸭子飞一次是土鸡飞一次距离的5倍,为了让伪装不露馅,我们让土鸡飞五次。
package Adaptor;/** * Created by sgzhang on 2015/8/17. */public class TurkeyAdaptor implements Duck{ Turkey turkey; public TurkeyAdaptor(Turkey turkey) { this.turkey=turkey; } @Override public void quack() { turkey.gobble(); } @Override public void fly() { for(int i=0;i<5;i++){ turkey.fly(); } System.out.println("飞了5次就和鸭子飞一次那么远了,嘿嘿!"); }
可以看到该适配器内部有一个Turkey的引用,在适配器的构造方法中得以指定所指。
最后是测试程序:
package Adaptor;/** * Created by sgzhang on 2015/8/17. */public class AdaptorTest { public static void main(String[] args){ //需要一只Duck但是现在只有Turkey,为了交差只能用土鸡去冒充鸭子了 Duck aDuck=new TurkeyAdaptor(new MallarTurkey()); aDuck.fly(); aDuck.quack(); System.out.println("调用者:这是一只好鸭子!"); }}
0 0
- 适配器及适配器模式
- 适配器及适配器模式
- 适配器模式(类适配器)
- 适配器模式(默认适配器)
- 适配器模式(对象适配器)
- 适配器模式-类适配器
- 适配器模式-对象适配器
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- 适配器模式
- [MSSQL]SQL 数字转换英文函数
- C/C++中extern关键字详解
- Java使用patchca生成验证码
- eclipse下web开发步骤
- MetaSploit framework基础知识
- 适配器模式
- 1080. Graduate Admission (30)
- java登录程序用户密码5分钟内输错3次锁定用户账号一天的实现
- pat(A) 1002. A+B for Polynomials (一元多项式的表示及相加)
- 【Shader】Shader名词详解
- 黑马程序员——JAVA高新技术——反射
- abstract class 和 interface 区别
- HDOJ 1874 畅通工程续 (最短路 Dijkstra && SPFA && Floyd)
- ExtJs 复杂的panel设置控件只读