/** * 适配器模式 * 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; } @Override public void defend() { System.out.println(this.name + " defend!!!"); } @Override public void attack() { System.out.println(this.name + " attack!!!"); } } class CBAPlayer implements CBA{ private String name; public CBAPlayer(String name){ this.name = name; } @Override public void fangShou() { System.out.println(this.name + " 防守!!!"); } @Override public 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; } @Override public void defend() { System.out.println("====翻译翻译 defend 为 defend"); player.fangShou(); } @Override public 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+"] 干倒了一名对方球员"); }; }
输出结果:
普通球员[布拉彻] 进攻 普通球员[布拉彻] 防守 核心球员[兰迪尔-迪-奥坎波] 干倒了一名对方球员 核心球员[东多-汉迪弗罗斯] 干倒了一名对方球员 核心球员[卡尔文-阿布埃瓦] 干倒了一名对方球员
相关推荐
《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。...无论是初级开发者还是经验丰富的程序员,都应该不断探索和实践设计模式,以提升自己的专业技能。
初级程序员可以学习设计模式的基本概念和应用,高级程序员能够从书中掌握更多高级技巧,而系统分析师可以通过设计模式来解决项目中遇到的复杂问题。 总体而言,设计模式是软件工程领域的宝贵财富,而《JAVA设计模式...
《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...
《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...
《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...
《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...
《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书...综上所述,本书不仅是一本关于设计模式的入门书,也是对设计模式应用的深入探讨,无论是对于初级开发者、高级程序员,还是系统分析师,都能从中获得价值。
- **初级开发者**:可以学习JavaScript的基础知识和一些简单的设计模式。 - **中级开发者**:可以通过学习设计模式进阶,了解更高级的设计模式和技术细节。 - **高级开发者**:可以深入了解设计模式的应用,以及如何...
这23种模式是根据GOF(GoF,Gang of Four)的经典著作《设计模式:可复用面向对象软件的基础》中的分类,包括创建型模式(如工厂模式、抽象工厂模式、单例模式等)、结构型模式(如适配器模式、桥接模式、装饰模式等...
例如,适配器模式(Adapter)用于使不兼容的接口协同工作;装饰器模式(Decorator)允许动态地给对象添加新的行为或责任;代理模式(Proxy)为对象提供一个代理以控制对这个对象的访问;桥接模式(Bridge)将抽象...
设计模式是软件工程中解决常见问题的模板或通用解决方案,Java设计模式是这些解决方案在Java语言中的具体实现。《java23种设计模式详细讲解》这本书系统地介绍了23种设计模式,并通过具体的例子来阐释每种模式的应用...
对于不同级别的程序员,设计模式能够提供不同程度的帮助和指导,从初级程序员的基础编程技能提升,到高级程序员的系统设计和架构,再到系统分析师的项目问题解决,设计模式都能发挥关键作用。 在应用设计模式时,...
- **适配器模式**:允许不兼容的接口协同工作。 - **桥接模式**:将抽象部分与其实现部分分离,使得两者可以独立变化。 - **组合模式**:将对象组合成树形结构以表示“部分-整体”的层次结构。 - **外观模式**:...
《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...
本文讲述的是软件开发领域内设计模式的概念,以及如何将这些模式应用于Java编程中。设计模式是软件工程中,为了解决特定问题而形成的一种通用、可重复使用的解决方案模板。在软件开发中,设计模式为开发者提供了一套...
对于一个Java初级工程师来说,掌握设计模式是提升到高级工程师的关键步骤,因为设计模式能提高代码的可读性、可维护性和可扩展性。 1. **创建型模式**: - **工厂方法**:定义一个用于创建对象的接口,让子类决定...