适配器模式(Adepter)
适配器模式(Adepter),将一个类的接口转换成客户希望的另外一个接口。Adepter模式使得原本由于模式不兼容而不能一起工作的那些类,可以一起工作。在软件开发中,当系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器模式,目的是使控制范围之外的一个原有对象与某个接口匹配,适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境不一致的情况,比如要在需要对早起代码复用,一些功能等应用上很有实用价值。适配器模式UML类图:分析:Target是客户所期待的接口,目标可以是具体的或抽象的类也可以是接口;Adeptee是需要适配的类;Adepter是适配器类,通过在内部包装一个Adeptee对象把源接口转换成目标接口。适配器模式实现:[csharp]using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Adepter{/** 这是客户所期待的接口,目标可以是具体的或抽象的类也可以是接口*/class Target{public virtual void Request(){Console.WriteLine("普通请求...");}}/*** 需要适配的类*/class Adeptee{public void SpecificRequest(){Console.WriteLine("特殊请求...");}}/** Adepter通过在内部包装一个Adeptee对象把源接口转换成目标接口*/class Adepter : Target{private Adeptee adeptee = new Adeptee();//这是一个私有的Adeptee对象public override void Request(){this.adeptee.SpecificRequest();//这样就可以把表面调用Request()方法,转换为调用SpecificRequest()方法//base.Request();}}}客户端:[csharp]using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Adepter{class Program{static void Main(string[] args){Target target = new Adepter();target.Request();//对客户来说,调用的就是Target的Request()Console.Read();}}}适配器模式总结:当使用一个已经存在的类,但是它的接口也就是它的方法或你的要求不相同时;两个类所做的事情相同或者相似但是接口不同时,应该考虑使用适配器模式。这样客户可以统一调用一个接口,从而更简单、更直接、更紧凑。适配器模式案例—篮球翻译适配器[csharp]using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace AdepterExample{abstract class Player{private string name;public Player(string name){this.name = name;}public string getName(){return this.name;}public void setName(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},进攻!",this.getName());//throw new NotImplementedException();}public override void Defense(){Console.WriteLine("前锋{0},防守!", this.getName());//throw new NotImplementedException();}}class Center : Player{public Center(string name) : base(name) { }public override void Attack(){Console.WriteLine("中锋{0},进攻!", this.getName());//throw new NotImplementedException();}public override void Defense(){Console.WriteLine("中锋{0},防守!", this.getName());补充:软件开发 , C# ,