head first-----------------深入浅出适配器模式
     适配器模式:将一个类的接口,转换成客户想要的另外一个接口,适配器然原本接口不兼容的类可以合作无间。从而可以不用更改旧的代码就可以适应新的业务需求
     package com.clark.adapterpattern.abstractclass;
/**
 * Duck 接口
 * @author Administrator
 *
 */
public interface Duck {
public void quack();//呱呱叫方法
public void fly();//鸭子会飞
}
package com.clark.adapterpattern.abstractclass;
/**
 * 火鸡接口
 * @author Administrator
 *
 */
public interface Turkey {
public void gobble();//火鸡嘎嘎叫
public void fly();//火鸡也会飞,只是飞得短
}

package com.clark.adapterpattern;

import com.clark.adapterpattern.abstractclass.Duck;
/**
 * 绿头鸭
 * @author Administrator
 *
 */
public class MallardDuck implements Duck {

@Override
public void quack() {
System.out.println("Quack.......");
}

@Override
public void fly() {
System.out.println("fly remote distance.......");
}

}


package com.clark.adapterpattern;

import com.clark.adapterpattern.abstractclass.Turkey;
/**
 * 火鸡的具体实现
 * @author Administrator
 *
 */
public class WildTurkey implements Turkey {

@Override
public void gobble() {
System.out.println("Gobble gobble.....");
}

@Override
public void fly() {
System.out.println("fly short distance.....");
}

}

package com.clark.adapterpattern;

import java.util.Random;

import com.clark.adapterpattern.abstractclass.Duck;
import com.clark.adapterpattern.abstractclass.Turkey;
/**
 * 鸭子转换成火鸡的适配器
 * @author Administrator
 *
 */
public class DuckAdpter implements Turkey {
public Duck duck;
public Random rand;
public DuckAdpter(Duck duck){
this.duck=duck;
rand=new Random();
}
@Override
public void gobble() {
this.duck.quack();
}
@Override
public void fly() {
if(rand.nextInt(5)==0){
this.duck.fly();
}
}
}

package com.clark.adapterpattern;

import com.clark.adapterpattern.abstractclass.Duck;
import com.clark.adapterpattern.abstractclass.Turkey;
/**
 * 火鸡转化成鸭子的适配器
 * @author Administrator
 *
 */
public class TurkeyAdpter implements Duck {
public Turkey turkey;
public TurkeyAdpter(Turkey turkey){
this.turkey=turkey;
}
@Override
public void quack() {
this.turkey.gobble();
}

@Override
public void fly() {
//由于火鸡飞得距离短,所以让它多飞几次
for (int i = 0; i < 3; i++) {
this.turkey.fly();
}
}

}

package com.clark.adapterpattern;

import com.clark.adapterpattern.abstractclass.Duck;
import com.clark.adapterpattern.abstractclass.Turkey;

/**
 * Test CLASS
 * @author Administrator
 *
 */
public class TestDrive {
public static void main(String[] args) {
//先创建一只鸭子和一只火鸡
MallardDuck duck=new MallardDuck();
WildTurkey turkey=new WildTurkey();

//然后将火鸡包装进火鸡适配器,鸭子装到鸭子适配器
Duck turkryAdpter=new TurkeyAdpter(turkey);
Turkey DuckAdpter=new DuckAdpter(duck);
//打印原来火鸡和鸭子的行为
System.out.println("The Turkey says.....");
turkey.gobble();
turkey.fly();
System.out.println("\nThe Duck says.....");
testDuck(duck);
//使用适配器之后输出的行为
System.out.println("\nThe turkeyadpter says....");
testDuck(turkryAdpter);
System.out.println("\nThe turkeyAdpter says....");
testTurkey(turkey);
}
public static void testDuck(Duck duck){
duck.quack();
duck.fly();
}
public static void testTurkey(Turkey turkey){
turkey.gobble();
turkey.fly();
}

}


//=============Test result================
The Turkey says.....
Gobble gobble.....
fly short distance.....

The Duck says.....
Quack.......
fly remote distance.......

The turkeyadpter says....
Gobble gobble.....
fly short distance.....
fly short distance.....
fly short distance.....

The turkeyAdpter says....
Gobble gobble.....
fly short distance.....


head first-----------adpter pattern的更多相关文章

  1. 按照Enterprise Integration Pattern搭建服务系统

    在前一篇文章中,我们已经对Enterprise Integration Pattern中所包含的各个组成进行了简单地介绍.限于篇幅(20页Word以内),我并没有深入地讨论各个组成.但是如果要真正地按 ...

  2. Enterprise Integration Pattern - 组成简介

    近些年来,越来越多的Web应用正在逐渐向大型化的方向发展.它们通常都会包含一系列相互协作的子服务.在开发过程中,如何让这些子服务协同工作常常是软件开发人员所最为头疼的问题,如各个子服务之间的数据表示不 ...

  3. 设计模式(十二):通过ATM取款机来认识“状态模式”(State Pattern)

    说到状态模式,如果你看过之前发布的重构系列的文章中的<代码重构(六):代码重构完整案例>这篇博客的话,那么你应该对“状态模式”并不陌生,因为我们之前使用到了状态模式进行重构.上一篇博客我们 ...

  4. 设计模式(十一):从文Finder中认识"组合模式"(Composite Pattern)

    上一篇博客中我们从从电影院中认识了"迭代器模式"(Iterator Pattern),今天我们就从文件系统中来认识一下“组合模式”(Composite Pattern).说到组合模 ...

  5. 设计模式(十):从电影院中认识"迭代器模式"(Iterator Pattern)

    上篇博客我们从醋溜土豆丝与清炒苦瓜中认识了“模板方法模式”,那么在今天这篇博客中我们要从电影院中来认识"迭代器模式"(Iterator Pattern).“迭代器模式”顾名思义就是 ...

  6. 设计模式(九): 从醋溜土豆丝和清炒苦瓜中来学习"模板方法模式"(Template Method Pattern)

    今天是五.四青年节,祝大家节日快乐.看着今天这标题就有食欲,夏天到了,醋溜土豆丝和清炒苦瓜适合夏天吃,好吃不上火.这两道菜大部分人都应该吃过,特别是醋溜土豆丝,作为“鲁菜”的代表作之一更是为大众所熟知 ...

  7. 设计模式(八): 从“小弟”中来类比"外观模式"(Facade Pattern)

    在此先容我拿“小弟”这个词来扯一下淡.什么是小弟呢,所谓小弟就是可以帮你做一些琐碎的事情,在此我们就拿“小弟”来类比“外观模式”.在上面一篇博文我们完整的介绍了“适配器模式”,接下来我们将要在这篇博客 ...

  8. 设计模式(七): 通过转接头来观察"适配器模式"(Adapter Pattern)

    在前面一篇博客中介绍了“命令模式”(Command Pattern),今天博客的主题是“适配器模式”(Adapter Pattern).适配器模式用处还是比较多的,如果你对“适配器模式”理解呢,那么自 ...

  9. 设计模式(三):“花瓶+鲜花”中的装饰者模式(Decorator Pattern)

    在前两篇博客中详细的介绍了"策略模式"和“观察者模式”,今天我们就通过花瓶与鲜花的例子来类比一下“装饰模式”(Decorator Pattern).在“装饰模式”中很好的提现了开放 ...

  10. 设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)

    在前段时间呢陆陆续续的更新了一系列关于重构的文章.在重构我们既有的代码时,往往会用到设计模式.在之前重构系列的博客中,我们在重构时用到了“工厂模式”.“策略模式”.“状态模式”等.当然在重构时,有的地 ...

随机推荐

  1. Oracle RAC OCR 与健忘症

    OCR就好比Windows的一个注册表,存储了所有与集群,RAC数据库相关的配置信息.而且是公用的配置,也就是说多个节点共享相同的配置信息.因此该配置应当存储于共享磁盘.本文主要基于Oracle 10 ...

  2. OpenGL ES之GLSurfaceView学习一:介绍

    原文地址::http://120.132.134.205/cmdn/supesite/?uid-5358-action-viewspace-itemid-6527 GLSurfaceView是一个视图 ...

  3. suse下设置IP的两种方法

    /Files/yzhxhwt/DB_51aspx.rar 第一种SUSE Linux IP设置方法ifconfig eth0 192.168.1.22 netmask 255.255.255.0 up ...

  4. REST构架风格介绍:状态表述转移

    REST(Representational State Transfer)是HTTP协议的作者Roy Fielding博士在其博士论文中提出的一种互联网应用构架风格.与以远程对象为核心的ORB和以服务 ...

  5. 嵌入式 VFS: Cannot open root device "mtdblock2" or unknown-block(2,0)

    系统启动后,虽然nand驱动表现正常,但是最后挂载rootfs时候出错: Kernel command line: root=/dev/mtdblock2 rw init=/linuxrc conso ...

  6. Bootstrap学习笔记上(带源码)

    阅读目录 排版 表单 网格系统 菜单.按钮 做好笔记方便日后查阅o(╯□╰)o bootstrap简介: ☑  简单灵活可用于架构流行的用户界面和交互接口的html.css.javascript工具集 ...

  7. [再寄小读者之数学篇](2014-11-24 Abel 定理)

    设幂级数 $\dps{g(x)=\sum_{n=0}^\infty a_nx^n}$ 在 $|x|<1$ 内收敛, 且 $\dps{\sum_{n=0}^\infty a_n=s}$ 收敛. 则 ...

  8. 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)(整理)

    BSD开源协议(original  BSD license.FreeBSD  license.Original  BSD license) BSD开源协议是一个给于使用者很大自由的协议.基本上使用者可 ...

  9. OpenERP 7.0 中文报表PDF乱码(WindowsXP)

    OpenERP默认安装输出的PDF中文报表都是一些方块: 此问题可以通过oecn_base_fonts模块解决: 更多关于oecn_base_fonts的信息请参考: 1. OpenERPv7.0 中 ...

  10. <转+改>Web测试中关于登录的测试

    请问,你为自己写过的用例怀疑过吗? 前两天听一个朋友说他同事写了100个用例,结果有92个是无效的,差点被公司开了,本人以前也写过不少用例,但现在忽然怀疑我的用例了,觉得越来越糊涂了,拿登陆框来说吧, ...