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.....

转载于:https://www.cnblogs.com/snake-hand/p/3188510.html

head first-----------adpter pattern相关推荐

  1. 技术图文:03 结构型设计模式(上)

    结构型设计模式(上) 本教程主要介绍一系列用于如何将现有类或对象组合在一起形成更加强大结构的经验总结. 知识结构: 享元模式 – 实现对象的复用 Sunny 软件公司欲开发一个围棋软件,其界面效果如下 ...

  2. java中的pattern_Java Pattern的用法是什么?

    展开全部 java 中pattern为正则表达式的编译表示形式.指定为字符串的正则表达式必须首先被编译为此类的实例.然后,62616964757a686964616fe58685e5aeb931333 ...

  3. LeetCode刷题记录11——290. Word Pattern(easy)

    LeetCode刷题记录11--290. Word Pattern(easy) 目录 LeetCode刷题记录11--290. Word Pattern(easy) 题目 语言 思路 源码 后记 题目 ...

  4. Observer Pattern 观察者模式

    Observer Pattern (观察者模式) 定义: <设计模式>中对Observer模式的意图是这样描述的:"定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, ...

  5. Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) B. Verse Pattern 水题

    B. Verse Pattern 题目连接: http://codeforces.com/contest/722/problem/B Description You are given a text ...

  6. 翻译:java.util.regex.Pattern

    java.util.regex.Pattern A compiled representation of a regular expression. A regular expression(正则表达 ...

  7. IronPython系列:Composite Pattern及其实现

    最近挺经常做鱼的.对于做鱼的步骤算是熟悉.以烤制为例,主要有三步:洗(Clean).切(Cut)和烤(Bake).烤鱼(Bake)又有两个小步:加热(Heat)和烤(Bake).软件开发也是这样,整个 ...

  8. 装饰模式(Decorator Pattern)

    装饰模式(Decorator Pattern) 一句话                                                                 继承一个抽象类, ...

  9. (转载)深入浅出设计模式——桥接模式(Bridge Pattern)

    模式动机设想如果要绘制矩形.圆形.椭圆.正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色.绿色.蓝色等,此时至少有如下两种设计方案: 第一种设计方案是为每一种形状都提供一套 ...

  10. Python 出现 can't use a string pattern on a bytes-like object

    # coding=utf-8 import urllib.request import re url = 'http://www.163.com' file = 'd:/test.html' data ...

最新文章

  1. php 3 3公派算法代码,PHP常见算法合集代码实例
  2. Eclipse高效率开发技巧
  3. JSP 防止网页刷新重复提交数据
  4. 常用python模块
  5. JSONObject和JSONArray 以及Mybatis传入Map类型参数
  6. 理解Lucene/Solr的缓存
  7. 如何只保留1000条数据mysql_php实现只保留mysql中最新1000条记录
  8. python背单词小程序_python背单词小程序
  9. python sys模块详解_python中os和sys模块的区别与常用方法总结
  10. 【学堂在线数据挖掘:理论方法笔记】第八天(4.2)
  11. i5 9400f和i7 7700k哪个好
  12. 淘宝自动回复机器人配置手册——利用旺旺分流针对性配置
  13. Ubuntu 设置PTP时间同步
  14. android 广告栏效果,叫教你打造一个滑动悬浮置顶的视觉效果,给你的广告栏增加一些特色...
  15. 5G LTE窄带物联网(NB-IoT) 9
  16. 2021年华数杯数学建模B题进出口公司的货物装运策略求解全过程文档及程序
  17. 数据结构之树从入门到如土(四)----从零开始入门Rust实现一颗B树(未完成待续)
  18. robotframework基础入门:(3):找不到关键字的对应方法
  19. 深度之眼(十七)——Python标准库
  20. 1181: 零起点学算法88——偶数求和(C语言)

热门文章

  1. 关于DB2 MQT 增量更新,出错代码详细说明
  2. ES6中新增字符串方法,字符串模板
  3. 2017 [六省联考] T5 分手是祝愿
  4. sqlserver存储过程sp_send_dbmail邮件(html)实际应用
  5. Servlet(3):Cookie
  6. Java中正则Matcher类的matches()、lookAt()和find()的差别
  7. Ubuntu中设置静态IP和DNS
  8. 通过邮箱验证注册——.net代码
  9. 在C#代码中获取Silverlight的初始化initparams参数
  10. c++primer plus 第13章 编程题第2题