当前位置:首页 > Windows程序 > 正文

《Head First设计模式》C#实现(二)

2021-03-27 Windows程序

  适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

  如果它走起路来像只鸭子,叫起来像只鸭子,那么它必定可能是一只鸭子包装了鸭子适配器的火鸡……

  最近有一个鸭子选美大赛,比赛项目是叫声和飞行距离。我养的是一只野火鸡,但我想让它伪装成鸭子去参加比赛。首先所有鸭子会叫也会飞,即所有鸭子都实现鸭子接口

interface Duck { void quack();//鸭子呱呱叫 void fly();//鸭子会飞 }

   所有火鸡也需要实现一个接口

interface Turkey { void gobble();//火鸡咯咯叫 void fly();//火鸡会飞,虽然飞不远 }

  比赛的对手是绿头鸭

class MallardDuck : Duck { public void quack() { Console.WriteLine("呱呱呱"); } public void fly() { Console.WriteLine("我在飞"); } }

  我的野火鸡

class WildTurkey : Turkey { public void gobble() { Console.WriteLine("咯咯咯"); } public void fly() { Console.WriteLine("我飞了很短一段距离"); } }

  比赛的流程如下

static void testDuck(Duck duck) { duck.quack(); duck.fly(); }

  显然我的野火鸡接口不同,不能公然拿来使用,但是我们可以给他伪装一下,伪造一个鸭子血统

class TurkeyAdapter : Duck { Turkey turkey; public TurkeyAdapter(Turkey turkey) { this.turkey = turkey; } public void quack() { turkey.gobble();//独特的叫声或许是加分项 } public void fly() { for (int i = 0; i < 5; i++) { turkey.fly();//飞的不够远就多飞几次 } } }

  好了,现在我的野火鸡也可以参加鸭子大赛了,,不过在此之前,我的野火鸡将作为特邀嘉宾先上场表演

static void Main(string[] args) { MallardDuck duck = new MallardDuck(); WildTurkey turkey = new WildTurkey(); Duck turkeyAdapter = new TurkeyAdapter(turkey); Console.WriteLine("特邀嘉宾(火鸡)上场"); turkey.gobble(); turkey.fly(); Console.WriteLine("\n鸭子一号(绿头鸭)上场"); testDuck(duck); Console.WriteLine("\n鸭子二号(伪装成鸭子的火鸡)上场"); testDuck(turkeyAdapter); Console.ReadKey(); }

  我的火鸡就这样顺利的参加了鸭子大赛

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/68320.html