设计模式——适配器模式(NBA里有翻译)
来源:互联网 发布:淘宝热销品牌排行榜 编辑:程序博客网 时间:2024/06/05 12:26
目的:接口不符时,控制范围之外的一个原有对象与某个接口匹配。主要应用于希望复用一些现存的类,但是接口又与复用环境不一致的情况。
Adapter结构图:
实现功能:
结构图:
又与姚明刚到NBA,只能实现 进攻() 和防守() ,而无法实现Attck() 和 Defense,因此此时就需要Translator充当适配器,继承Play抽象类了。
具体实现代码:
namespace _13适配器{ class Program { static void Main(string[] args) { Player fw = new Forwards("巴蒂尔"); fw.Attack(); Player gd = new Guards("麦克格雷迪"); gd.Attack(); Player ym = new Translator("姚明"); //避免与wjzf发生关系 ym.Attack(); ym.Defense(); Console.ReadKey(); } } abstract class Player { protected string name; public Player(string name) { this.name = name; } public abstract void Attack(); public abstract void Defense(); } class Forwards : Player { public Forwards(string name) : base(name) { } public override void Attack() { Console.WriteLine("前锋{0}进攻",name); } public override void Defense() { Console.WriteLine("前锋{0}防守",name); } } class Center : Player { public Center(string name) : base(name) { } public override void Attack() { Console.WriteLine("中锋{0}进攻",name); } public override void Defense() { Console.WriteLine("中锋{0}防守",name); } } class Guards:Player { public Guards(string name) : base(name) { } public override void Attack() { Console.WriteLine("前锋{0}进攻",name); } public override void Defense() { Console.WriteLine("前锋{0}防守",name); } } class Translator : Player //扮演中锋角色 { private ForeignCenter wjzf = new ForeignCenter(); public Translator(string name) : base(name) { wjzf.Name=name ; } public override void Attack() //翻译调用外籍中锋中进攻方法 { wjzf.进攻(); } public override void Defense() //翻译调用外籍中锋中防守方法 { wjzf.防守(); } } class ForeignCenter //外籍中锋类(方法语言不通,接口不一致) { private string name; public string Name { get{return name;} set{name=value;} } public void 进攻() { Console.WriteLine ("外籍中锋{0} 进攻",name); } public void 防守() { Console .WriteLine ("外籍中锋{0} 防守",name); } }}
此模式虽然存在其实用性,但是乱用倒不如不用。“事先预防接口不同的问题,不匹配问题就不会发生;在有小的接口不统一问题发生时,及时重构,问题不至于扩大;只有碰到无法改变原有设计和代码的情况时,才考虑适配。”
魏文王之问扁鹊耶?曰:‘子昆弟三人其孰最善为医?’扁鹊曰:‘长兄最善,中兄次之,扁鹊最为下。’魏文侯曰:‘可得闻邪?’扁鹊曰:‘长兄于病视神,未有形而除之,故名不出于家。中兄治病,其在毫毛,故名不出于闾。若扁鹊者,镵血脉,投毒药,副肌肤,闲而名出闻于诸侯。’
——《鹖冠子》---世贤第十六
- 设计模式——适配器模式(NBA里有翻译)
- 【结构型模式】《大话设计模式》——读后感 (12)在NBA我需要翻译?——适配器模式
- 《大话设计模式》—— 读后感(17)在NBA我需要翻译——适配器模式
- 【设计模式】在NBA需要翻译 --- 适配器模式
- 《大话设计模式》之--第17章 在NBA我需要翻译----适配器模式
- 《大话设计模式》之--第17章 在NBA我需要翻译----适配器模式
- 《大话设计模式》--在NBA我需要翻译--适配器模式<Adapter>(17)
- 大话设计模式-第17章 在NBA我需要翻译----适配器模式
- 适配器模式 X NBA翻译 X 接口不一致
- 第17章 在NBA我需要翻译--适配器模式
- 第十七章 在看NBA需要翻译--适配器模式(读书笔记)
- 设计模式—适配器模式(十三)
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- poj1245解题报告
- 函数式编程
- Java基础 Annotation
- 123
- Shell 进程前台与后台转换方法
- 设计模式——适配器模式(NBA里有翻译)
- BER, CER, DER
- 合并两个排序链表
- 散列(分离链接法)
- Android 日历开发教程[一]
- 反转单向链表
- 省份和城市数组 下拉列表
- Java基础_正则表达式_Matcher常用方法
- icons 资源