设计模式练习:适配器模式

  依旧参考大话模式当中的例子,改变一下改成适合的as程序。适配器模式,将一个类的接口转换客户希望的另一外一个接口

 

生活中,我们可以常见的电器插口,电脑硬盘并口转换串口的做法。可以想象他就是一个适配器。

在大话模式当中,说到NBA姚明的例子,这个例子使用了一个简单的做法,通过翻译者继承共有的接口,同时关联外籍中锋类。好,现在我们尝试写一个球员类Player.as 类。

 

<textarea cols="50" rows="15" name="code" class="c-sharp">package { public class Player { /* 球员类,有防守和攻击两个方法 * */ public var name:String; public function Player(name:String) { this.name=name; } public function Attack():void { } public function Defense():void { } } }</textarea>

 

在这个类当中,我们有两个方法,一个是攻击,一个是防守。

 

<textarea cols="50" rows="15" name="code" class="c-sharp">package { public class Guards extends Player { /* 后卫类,有防守和攻击两个方法 * */ public function Guards(name:String) { super(name); this.name=name; } override public function Attack():void { trace("进攻" +name); } override public function Defense():void { trace("防守" +name); } } }</textarea>

 

 

 

其他的前锋一样。

.......................

.............................

.....................................

.........................................

 

 

 

接下来,我们写一个外籍中锋类:中锋类当中由于和球员类的接口不一样,导致在战术上不能有效执行为了修复这个错误,我们使用了翻译者。

 <textarea cols="50" rows="15" name="code" class="c-sharp">package { public class ForeignCenter { /* 外籍中锋类,有防守和攻击两个方法,但是不会听英语的,需要通过翻译者翻译才知道战术的布置 * */ private var name:String; public function ForeignCenter() { } public function get Name():String { return name; } public function set Name(name:String):void { this.name=name; } public function jingong():void { trace("外籍中锋"+Name+"进攻"); } public function fangshou():void { trace("外籍中锋"+Name+"防守"); } } }</textarea>

 

 

外籍中锋,当中由于不会听取英语,所以要通过翻译者翻译,然后执行战术,这里编程过程关联了外籍中锋类,封装了外籍中锋类当中的方法。通过翻译者,间接使用了中锋的方法。

 

<textarea cols="50" rows="15" name="code" class="c-sharp">package { public class Translator extends Player { /* 翻译者类,翻译防守和攻击执行战术 * */ private var yaoming:ForeignCenter=new ForeignCenter();//外籍中锋 public function Translator(Name:String) { super(Name); yaoming.Name=Name; } override public function Attack():void { yaoming.jingong(); } override public function Defense():void { yaoming.fangshou(); } } }</textarea>

 

翻译者告诉中锋,下达了进攻和防守的命令,从而变成了符合预期的接口。

 

 

进行测试一下:创建一个翻译员,翻译员告诉姚明,在比赛上进攻和防守,同样后卫也一样,执行战术

<textarea cols="50" rows="15" name="code" class="c-sharp">package { import flash.display.Sprite; import flash.events.*; public class Test extends Sprite { public function Test() { var ym:Player=new Translator("姚明"); ym.Attack(); ym.Defense(); var bd:Guards=new Guards("小布"); bd.Attack(); } } }</textarea>

 

 

 

输出:

外籍中锋姚明进攻
外籍中锋姚明防守
进攻小布

 

 

参考资料:《大话模式》171--179页。改写了一个例子

 

 

 

 

 

你可能感兴趣的:(设计模式,function,String,生活,Class,import)