设计模式--适配器模式

现实生活中一些适配器例子

·用火鸡冒充鸭子

演示代码
Duck

public interface Duck {public void quack();public void fly();
}

GreenHeadDuck

public class GreenHeadDuck implements Duck {@Overridepublic void quack() {// TODO Auto-generated method stubSystem.out.println(" Ga Ga");}@Overridepublic void fly() {// TODO Auto-generated method stubSystem.out.println("I am flying a long distance");}}

Turkey

public interface Turkey {public void gobble();public void fly();}

WildTurkey

public class WildTurkey implements Turkey {@Overridepublic void gobble() {// TODO Auto-generated method stubSystem.out.println(" Go Go");}@Overridepublic void fly() {// TODO Auto-generated method stubSystem.out.println("I am flying a short distance");}}

适配器代码TurkeyAdapter

public class TurkeyAdapter implements Duck {private Turkey turkey;public TurkeyAdapter(Turkey turkey){this.turkey=turkey;}@Overridepublic void quack() {// TODO Auto-generated method stubturkey.gobble();}@Overridepublic void fly() {// TODO Auto-generated method stubfor(int i=0;i<6;i++){turkey.fly();}}}

MainTest


public class MainTest {public static void main(String[] args) {GreenHeadDuck duck=new GreenHeadDuck();WildTurkey turkey=new WildTurkey();Duck duck2turkeyAdapter=new TurkeyAdapter2();turkey.gobble();turkey.fly();duck.quack();duck.fly();duck2turkeyAdapter.quack();duck2turkeyAdapter.fly();}
}

·适配器模式原理

适配器模式:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容.


从用户的角度看不到被适配者,是解耦的
用户调用适配器转化出来的目标接口方法
适配器再调用被适配者的相关接口方法
用户收到反馈结果,感觉只是和目标接口交互

• 对象适配器与类适配器
类适配器:通过多重继承目标接口和被适配者类方式来实现适配

·类适配器的类图

多重继承,其中继承的目标接口部分达到适配目的,而继承被适配者类的部分达到通过调用被适配者类里的方法来实现目标接口的功能
·对象适配器与类适配器差异

对象适配器和类适配器使用了不同的方法实现适配,对象适配器使用组合,类适配器使用继承。

·用类适配器来做火鸡冒充鸭子问题(虽然java不支持多重继承,但可以通过继承和实现接口来实现)
TurkeyAdapter2

public class TurkeyAdapter2 extends WildTurkey implements Duck {@Overridepublic void quack() {// TODO Auto-generated method stubsuper.gobble();}@Overridepublic void fly() {// TODO Auto-generated method stubsuper.fly();super.fly();super.fly();}
}

从枚举器到迭代器的适配
枚举器到迭代器的适配的类图

演示代码(美中不足无法实现Remove()方法的功能)
EnumerationIterator

import java.util.Enumeration;
import java.util.Iterator;public class EnumerationIterator implements Iterator<Object> {private Enumeration enumeration;public EnumerationIterator(Enumeration enumeration){this.enumeration= enumeration;}@Overridepublic boolean hasNext() {// TODO Auto-generated method stubreturn enumeration.hasMoreElements();}@Overridepublic Object next() {// TODO Auto-generated method stubreturn enumeration.nextElement();}@Overridepublic void remove() {// TODO Auto-generated method stubthrow new UnsupportedOperationException();}}

设计模式--适配器模式相关推荐

  1. Python设计模式-适配器模式

    Python设计模式-适配器模式 基于Python3.5.2,代码如下 #coding:utf-8class ACpnStaff:name = ""id = "" ...

  2. Java | 设计模式-适配器模式

    继代理模式后又来到适配器模式啦,想看之前的也有哦.持续更新中哦.让我们一起加油吧兄弟们,干他. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 你好,如果喜欢,请一起坚持!! ...

  3. java设计模式适配器模式_Java中的适配器设计模式

    java设计模式适配器模式 适配器设计模式是一种结构设计模式 ,可以帮助我们连接到通过不同接口公开相似功能的旧版或第三方代码. 适配器的现实世界是我们用来将USB电缆连接到以太网端口的类比. 在设计一 ...

  4. 设计模式适配器模式_适配器设计模式示例

    设计模式适配器模式 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重要 ...

  5. 设计模式适配器模式_21世纪的设计模式:适配器模式

    设计模式适配器模式 这是我的演讲的第三部分," 21世纪的设计模式" . 适配器模式桥接世界. 在一个世界中,我们有一个概念的界面. 在另一个世界,我们有不同的界面. 这两个接口有 ...

  6. java设计模式适配器模式_Java解释器设计模式

    java设计模式适配器模式 Interpreter design pattern is one of the behavioral design pattern. Interpreter patter ...

  7. Java代码审计-设计模式-适配器模式

    Java设计模式-适配器模式(Adapter Pattern) 目录 什么是适配器模式 适配器模式的3种类型 JavaSE适配器模式的应用 Struts2适配器模式的应用 适配器模式是一种" ...

  8. 【设计模式】Java设计模式 - 适配器模式

    [设计模式]Java设计模式 - 适配器模式

  9. C++设计模式——适配器模式(adapter pattern)

    一.原理讲解 适配器模式别名为包装器(wrapper),分为类适配器(通过多继承实现).对象适配器(组合方式实现),由于类适配器比较少用,本文主要讲解用的比较多的对象适配器. 1.1意图 将一个类的接 ...

  10. [Head First设计模式]身边的设计模式——适配器模式

    系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式- ...

最新文章

  1. 【Treap】bzoj1588-HNOI2002营业额统计
  2. 一起学WP7 XNA游戏开发(三.二 Sprite Texture Font)
  3. opencv计算亮度
  4. 我们的2008。。。。。。
  5. 什么是 ANSI C 和 GNU C
  6. 微软宣布 Edge 浏览器将切换至 Chromium 内核
  7. ios 旋转加载gif_iOS 中gif图的显示
  8. 数据科学家应该掌握的12种机器学习算法(附信息图)
  9. 编译Windows版本ffmpeg:msys2方式失败
  10. 其实华为手机按下这个按钮,还能自动清理内存垃圾,真是厉害了
  11. JavaScript 基础概念
  12. 新闻资讯|iPad mini 概念想象重新设计,配备更大的8.4英寸Liquid Retina显示屏
  13. 挂耳耳机十大品牌排行榜哪个好,目前排行靠前的五款耳机推荐
  14. 大聪明教你学Java | 深入浅出聊布隆过滤器(Bloom Filter)
  15. java《面向对象综合题》
  16. Python实现一个全国各高校查询系统
  17. MySQL理论:脏读、不可重复读、幻读
  18. 证监会:将重点关注公司上市不满三年卖壳行为
  19. 【20211127】【Python】Python中常用的矩阵操作,单位阵、对角阵、矩阵的特征值和特征向量、矩阵的协方差
  20. uni-app:封装组件

热门文章

  1. Java数据结构与算法-程序员十大常用算法[day13]
  2. 01-css3动画之过渡详解 以及 实战纯css打造手风琴图片特效
  3. css3 cale()属性介绍以及自适应布局使用方法
  4. 一个图片上传插件,含图片上传后生成预览图片
  5. 2018年sfdc工作总结_Lightning公用组件_模糊搜索单选组件
  6. 11,SFDC 管理员篇 - 报表和数据的可视化
  7. ospf及lsa总结
  8. Java 编程技术大全(上)实战练习 cp1-cp3
  9. 从借呗借了100元,看背后的系统架构
  10. Browserslist: caniuse-lite is outdated. Please run the following command: `npm update`