您的位置:首页 > 其它

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

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

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

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

package
{
public class Player
{
/* 球员类,有防守和攻击两个方法
*
*/

public var name:String;
public function Player(name:String)
{
this.name=name;
}
public function Attack():void
{

}
public function Defense():void
{

}

}
}


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

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);
}

}
}


其他的前锋一样。

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

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

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

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

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

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+"防守");
}

}
}


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

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();
}

}
}


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

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

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();

}
}
}


输出:

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

参考资料:《大话模式》171--179页。改写了一个例子
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: