c#适配器模式(Adapter)
无意间看到ArrayList的Adapter方法,没学过,学习一下
做了一个最简单的demo,一起来学一下吧
这是一个设计模式,叫适配器模式,一开始不是很理解,看了大话模式里的适配器模式之后,自己做了练习就理解了
1.下面是英文文档转换中文文档的适配器Demo
客户端:
//就拿开发文档举例吧,一开始发布的版本都是英文版,我们需要中文版 internal class Common { public void English() { Console.WriteLine("英文版"); } } //定义中文类 internal class ChineseVersion { /// <summary> /// 定义一个中文版的方法 /// </summary> public virtual void Chinese() { Console.WriteLine("中文版"); } } /// <summary> /// 继承中文版 /// </summary> internal class Translate: ChineseVersion { //虽然是重写中文版的方法,但是调用的却是英文版原版的文档,所以翻译过来就是我们要的英文版翻译成中文的文档了 private Common common = new(); public override void Chinese() { base.Chinese(); common.English(); } }
服务端调用(就是控制台调用)
Translate translate = new(); translate.Chinese();
2.下面这个是拿NBA球星姚明举例,是跟着大话设计模式做的,去了美国之后的姚明语言不通,这时候该怎么办呢,需要一个翻译,所以这个时候也可以体现我们的适配器模式
//设计一个球员抽象类,传入名称,有进攻和防守的抽象方法 //后卫,中锋,前锋都是球员 /// <summary> /// 球员抽象类 /// </summary> internal abstract class Player { protected string name; internal Player(string name) { this.name = name; } public abstract void Attack(); public abstract void Defend(); } /// <summary> /// 后卫 /// </summary> internal class Guard : Player { internal Guard(string name):base(name) { } public override void Attack() { Console.WriteLine(" 后卫 {0} 进攻",name); } public override void Defend() { Console.WriteLine($" 后卫 {name} 防守"); } } /// <summary> /// 中锋 /// </summary> internal class Centre : Player { internal Centre(string name) : base(name) { } public override void Attack() { Console.WriteLine($" 中锋 {name} 进攻"); } public override void Defend() { Console.WriteLine($" 中锋 {name} 防守"); } } /// <summary> /// 前锋 /// </summary> internal class Forward : Player { internal Forward(string name) : base(name) { } public override void Attack() { Console.WriteLine($" 前锋 {name} 进攻"); } public override void Defend() { Console.WriteLine($" 前锋 {name} 防守"); } } /// <summary> /// 外籍中锋 /// </summary> internal class ForeignCentre { //因为外部一会要调用这个变量,所以不设置私有 private string name; public string Name { get { return name; } set { name = value; } } public void 进攻() { Console.WriteLine(" 外籍中锋{0} 进攻",name); } public void 防守() { Console.WriteLine(" 外籍中锋{0} 防守", name); } } /// <summary> /// 翻译官 /// </summary> internal class Translator : Player { private ForeignCentre foreignCentre=new ForeignCentre(); internal Translator(string name):base(name) { foreignCentre.Name = name; } public override void Attack() { foreignCentre.进攻(); } public override void Defend() { foreignCentre.防守(); } }
Player forward = new Forward("巴蒂尔"); forward.Attack(); forward.Defend(); Player Centre = new Translator("姚明"); Centre.Attack(); Centre.Defend();
又get了一个技能
简单来说,就是你需要什么类型的数据,我就输出什么类型的数据,里面的数据不变,都给你存起来,只是省去了中间类型转换的复杂操作了,
你需要看中文文档,我给你输出中文文档,你只需要把英文版的文档给我,我就给你中文文档
另外奉上大话设计模式电子书:
链接:https://pan.baidu.com/s/1zYFFoGJLuMeiBl9ljzonnw
提取码:lkcb
越是无知的人越是觉得自己无所不知(之前的自己)
越是学习的人越是觉得自己会的太少了(现在的自己)
共勉