[AS3/设计模式]适配器
2011-11-15 00:13 WesleyWoo 阅读(363) 评论(0) 编辑 收藏 举报适配器,简单来说,就是对一个已知类再封装一下,使其能完成相似的功能的同时又满足某种规范(接口)。
一个最简单的适配器需要涉及到三个类:已有类Adaptee、适配器类Adapter、满足的目标接口ITarget。《actionscript3设计模式》中有个例子可以帮我们很好地理解适配器。
汽车驾驶适配器(P189):
有一个汽车类 Car,它有两个公有方法:
public function start():void//汽车启动
public function setSteeringWheelAngle(nAngle:int):void//方向盘,可根据输入的角度转动汽车的方向
这个汽车里就是适配器模式中的“已有类Adaptee”。
现在有一个需求,我们不想用方向盘控制车的方向了,而想改用键盘上"↑↓←→"等方向键来控制。于是,有了一个目标接口ICar:
function start():void//启动
function goStraight():void//向前
function turnRight():void//转右
function turnLeft():void//转左
这是适配器模式中的ITarget。
接下来,就是根据ICar接口来重新封装Car类的适配器CarAdapter:
public Class CarAdapter implements ICar
{
private var _car:Car = null;
private var _nAngle:Number = 0.0;
public function CarAdapter(car:Car) { _car = car; }
public function start():void{ _car.start(); }
public function goStraight():void{ _car.setSteeringWheelAngle(0); }
public function turnRight():void{ _car.setSteeringWheelAngle(90); }
public function turnLeft():void{ _car.setSteeringWheelAngle(-90); }
}
该适配器类利用Car类原有的setSteeringWheelAngle方法,按照ICar接口规范,封装成实现功能相近的转向功能,这就是适配器模式。
这个例子用到的是对象未作参数传入的对象适配器。
此外还有类适配器,直接继承已有类和规范接口进行扩展。道理相同,都是把已有类进行封装,使其实现了相近的功能又满足接口。
不过面向对象设计中提倡组合,总体来说,组合比继承更灵活。