适配器模式
2015-08-17 13:32
176 查看
适配器模式可以将一个类的接口转换成客户希望的另一个接口。当然,前提是这个类有能力实现客户希望的那些功能,否则转换毫无意义。
现假设有一个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("调用者:这是一只好鸭子!");
}
}
现假设有一个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("调用者:这是一只好鸭子!");
}
}
相关文章推荐
- 1080. Graduate Admission (30)
- pat(A) 1002. A+B for Polynomials (一元多项式的表示及相加)
- 12种JavaScript MVC框架之比较
- 黑马程序员——JAVA面向对象的特性:封装,继承,多态
- HDOJ 2544 最短路 (最短路 Dijkstra && SPFA && Floyd)
- Java使用patchca生成验证码
- eclipse下web开发步骤
- 测试管理之我见
- Eclipse快捷键
- MVN工程下Spring 集成 Activiti Modeler 5.18.0
- 极客Web前端开发资源大荟萃#016
- Piggy-Bank
- IOS-笔记4(类,结构体,枚举)
- C/C++中extern关键字详解
- iOS百度地图SDK之实时绘制轨迹(后台仍执行)
- [MSSQL]SQL 数字转换英文函数
- Piggy-Bank
- Windows 7 SP1 多国语言包(MUI language packs)官方下载
- 【转载】6种.net分布式缓存解决方案
- 快速布局