/*** 适配器模式*   1、源角色(已有的角色)*   2、目标角色(需要成为的角色)*    3、适配器角色(将 原角色 转换成 目标角色)* * 优点:*  1、不用修改已有代码*     2、复用已有代码* 缺点:*   1、会造成类相互之间的关系不清晰** 注意:*  属于"补丁"方法,尽量不要有机会使用** 场景:*   功能复合需求,但是调用跟需求不匹配时,中间通过一个转换类来实现两者之间的调用* *     NBA不可轻易改变,CBA不可轻易改变*     CBA球员不会英语,听不懂attack,无法进入NBA球队*    通过翻译翻译,CBA知道了attack就是jingong,可以进入NBA球队*/
public class AdapterDemo01 {public static void main(String[] args) {NBAPlayer tmac = new NBAPlayer("T-mac");NBAPlayer brooks = new NBAPlayer("布鲁克斯");NBAPlayer mutombo = new NBAPlayer("穆托姆博");CBAPlayer ym = new CBAPlayer("姚明");CBAPlayer dazhizi = new CBAPlayer("郭艾伦");NBATeam rockets = new NBATeam();rockets.add(tmac);rockets.add(brooks);rockets.add(mutombo);
//      rockets.add(ym);//编译报错
//      rockets.add(dazhizi);//编译报错rockets.add(new Translator(ym));//编译通过rockets.add(new Translator(dazhizi));//编译通过rockets.play();}
}
interface NBA{public void defend();public void attack();
}
interface CBA{public void fangShou();public void jinGong();
}
class NBAPlayer implements NBA{String name;public NBAPlayer(String name){this.name = name;}@Overridepublic void defend() {System.out.println(this.name + "  defend!!!");}@Overridepublic void attack() {System.out.println(this.name + "  attack!!!"); }
}
class CBAPlayer implements CBA{private String name;public CBAPlayer(String name){this.name = name;}@Overridepublic void fangShou() {System.out.println(this.name + "  防守!!!");}@Overridepublic void jinGong() {System.out.println(this.name + "  进攻!!!");}
}
class NBATeam{private List<NBA> playerList = new ArrayList<NBA>();public void add(NBA player){playerList.add(player);}public void play(){for(NBA play : playerList){System.out.println("[NBA]");play.attack();play.defend();}}
}
/*** 翻译(适配器)*/
class Translator implements NBA{public CBAPlayer player;public Translator(CBAPlayer p){this.player = p;}@Overridepublic void defend() {System.out.println("====翻译翻译 defend 为 defend");player.fangShou();}@Overridepublic void attack() {System.out.println("====翻译翻译 attack 为 jinGong");player.jinGong();}
}

输出结果:

[NBA]
T-mac  attack!!!
T-mac  defend!!!
[NBA]
布鲁克斯  attack!!!
布鲁克斯  defend!!!
[NBA]
穆托姆博  attack!!!
穆托姆博  defend!!!
[NBA]
====翻译翻译 attack 为 jinGong
姚明  进攻!!!
====翻译翻译 defend 为 defend
姚明  防守!!!
[NBA]
====翻译翻译 attack 为 jinGong
郭艾伦  进攻!!!
====翻译翻译 defend 为 defend
郭艾伦  防守!!!
/*** 缺省适配模式* *   1、标准接口*     2、适配器父类*    3、具体实现类* * 有时候我们继承父类,但是只实现了部分功能,其他功能只是空的实现* 我们定义一个专门实现空方法的父类,之后子类继承该父类,避免了子类去继承空方法的麻烦* * 场景:*    2015男篮亚锦赛决赛*    会打球可以进入菲律宾男篮,会打架也可以,*     所以菲男篮就有三个接口(throwBall、throwBall、scuffle)*   但有的球员只会打球,有的只会打架,*    所以为了让球员更关注与自己的工作,我们定义缺省适配器*  这样,各个球员只关注他们的主要工作就可以了*/
public class AdapterDemo02 {public static void main(String[] args) {SaucePlayer blch = new SaucePlayer("布拉彻");CorePlayer dacb = new CorePlayer("兰迪尔-迪-奥坎波");//33锁喉CorePlayer dh = new CorePlayer("东多-汉迪弗罗斯");//25断子绝孙腿CorePlayer ka = new CorePlayer("卡尔文-阿布埃瓦");//8锁喉PhilippineNationalTeam pnt = new PhilippineNationalTeam();pnt.add(blch);pnt.add(dacb);pnt.add(dh);pnt.add(ka);pnt.play();}
}
/*** 菲律宾国家队*/
class PhilippineNationalTeam{private List<PBA> playerList = new ArrayList<PBA>();public void add(PBA player){playerList.add(player);}public void play(){for(PBA play : playerList){play.throwBall();play.eyeDefense();play.scuffle();}}
}
/*** 菲律宾联赛*/
interface PBA{public void throwBall();public void eyeDefense();public void scuffle();
}
/*** 缺省适配器*/
abstract class DefaultPBA implements PBA{public void throwBall(){};public void eyeDefense(){};public void scuffle(){};
}
/*** 普通球员*/
class SaucePlayer extends DefaultPBA{private String name;public SaucePlayer(String name){this.name = name;}public void throwBall(){System.out.println("普通球员["+this.name+"] 进攻");};public void eyeDefense(){System.out.println("普通球员["+this.name+"] 防守");};
}
/*** 主要球员*/
class CorePlayer extends DefaultPBA{private String name;public CorePlayer(String name){this.name = name;}public void scuffle(){System.out.println("核心球员["+this.name+"] 干倒了一名对方球员");};
}

输出结果:

普通球员[布拉彻] 进攻
普通球员[布拉彻] 防守
核心球员[兰迪尔-迪-奥坎波] 干倒了一名对方球员
核心球员[东多-汉迪弗罗斯] 干倒了一名对方球员
核心球员[卡尔文-阿布埃瓦] 干倒了一名对方球员


 

 

[初级]设计模式--适配器模式相关推荐

  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意图 将一个类的接 ...

最新文章

  1. mapminmax函数 matlab,matlab mapminmax函数详解
  2. 【每日进步】May 2012
  3. [Python]理解 if __name__ == ‘__main__‘
  4. 25个经典的Spring面试问答
  5. B. 熟练剖分(tree) (概率DP)
  6. Project Server的页面如何修改Text
  7. LeetCode Algorithm 169. 多数元素
  8. tomcat开发远程调试端口以及利用eclipse进行远程调试
  9. 【操作系统】Semaphore处理生产者-消费者问题
  10. 炫酷超漂亮辅助网站源码
  11. .sh是什么语言_为什么《山海经·中次二经》中,把“西王母”叫做“马腹”?...
  12. 网络编程多人聊天c语言,socket网络编程--简单的多人聊天
  13. 方立勋_30天掌握JavaWeb_回顾复习
  14. DX9b 与 DX9c 在x文件解析方面带来的麻烦
  15. php 启用ereg,PHP 5.3的ereg / eregi替换
  16. 灵州会盟及民族友好历史传统研讨会在吴忠召开
  17. 因变量 方差膨胀系数_如何理解方差膨胀因子(Variance Inflation Factor,VIF)?
  18. fastadmin调用发送邮件验证码接口
  19. 【PPP概念股龙头】PPP再迎风口 相关概念股表现格外抢眼(2)
  20. 2022中国数据库产业排行榜

热门文章

  1. 傅老师课堂:Oracle高级应用之物化视图(materialized view)
  2. 基于java设计的图书管理系统
  3. python虚拟串口_Linux下的虚拟串口对(可用于在本机上模拟串口进行调试)
  4. 图解进程的(三种、五种)状态
  5. 时钟插件TextClock的使用
  6. XLua热更新框架学习(一)
  7. 我的专业我做主计算机演讲稿,我的未来我做主演讲稿
  8. Stata: Tobit 模型
  9. 项目管理_项目范围管理
  10. Samba服务+Samba实验