admin管理员组文章数量:1566600
策略模式:定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化; 使用的关键点是面对对象、面向接口编程。举个例子,以武士可以不断更换武器为例子背景: 策略模式实现步骤一:定义抽象策略类 interface IStrategy { void fighting(); } 策略模式实现步骤二:实现具体策略类 class Bow:IStrategy { public void fighting() { Console.WriteLine("向敌人放冷箭中……"); } } class Knife:IStrategy { public void fighting() { Console.WriteLine("使用刀作为武器…"); } } class Cannon:IStrategy { public void fighting() { Console.WriteLine("加农炮轰击敌人中……"); } } 策略模式实现步骤三:定义环境类 class Context { private IStrategy _strategy; public Context(IStrategy s) { this._strategy = s; } public void fighting() { this._strategy.fighting(); } } //调用 class Program { static void Main(string[] args) { Context context; context = new Context(new Knife()); Console.WriteLine("选择武器为刀:"); context.fighting(); Console.WriteLine(); context = new Context(new Bow()); Console.WriteLine("选择武器为弓:"); context.fighting(); Console.WriteLine(); context = new Context(new Cannon()); Console.WriteLine("选择武器为加农炮:"); context.fighting(); Console.WriteLine(); } } 适配器模式:是在想使用一个已经存在的类,但是他的接口并不符合要求,因为在编码过程中要遵循对扩展开放,对修改关闭的原则,所以不能对原有的类进行修改,这时便需要使用适配器模式,将原有的类适配成自己需要的形式。有类适配器和对象适配器两种适配器。举个简单的例子,以原本有一只神鹿只会快速跑,现在让它也会飞为背景,便能明白怎样使用了: 适配器模式实现步骤一:确定目标接口 interface ITarget { void run(); void fly(); } 适配器模式实现步骤二:确定被适配者 class Deer { public void run() { Console.WriteLine("我是一只神鹿,可带你游走四处。"); } } 适配器模式实现步骤三:创建适配器(类适配器) class classAdapter : Deer,ITarget //注意,这是采用继承的方式 { public void fly() { Console.WriteLine("哇啊哦,我可以飞了!!"); } } class Program { static void Main(string[] args) { ITarget flyDeer = new classAdapter(); flyDeer.run(); flyDeer.fly(); } } 适配器模式实现步骤三:创建适配器(对象适配器) class objectAdapter:ITarget { private Deer deer; //注意,这里是将目标作为适配器的一个成员 public objectAdapter(Deer d) { this.deer = d; } public void run() { deer.run(); } public void fly() { Console.WriteLine("哇啊哦,我一样可以飞!!"); } } class Program { static void Main(string[] args) { ITarget flyDeer = new objectAdapter(new Deer()); flyDeer.run(); flyDeer.fly(); } }欢迎访问个人博客:http://zhangxichuan.science
版权声明:本文标题:strategy策略模式与adapter适配器模式的区别 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1725702107a1037596.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论