几个设计模式的原则
1、 找出应用中可能需要变化指出,把它们独立出来,不要和那些不需要变化的代码混在一起;
2、 针对接口编程,而不是针对实现编程;
3、 多用组合,少用继承。
算法族的定义
使用了同一接口,分别封装实现的类的集合叫做算法族
策略模式的定义
定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
自行编写的简单范例:
假定我要写一个关于宝物的基类,每个它的子类都有一个实现不同的do的方法,如果设计初期,我们使用继承,那么每个子类都会执行相同的父类中定义的方法,如果想要某个子类中实现不同的实现,就需要override原有的方法,在子类中复写实现,这样个问题
如果我有7个子类,想要实现的效果除了基类定义的之后还有2种,那么在需要用到这2中实现的话,不得不在每个子类中都复写一次,而当我的实现发生需求变更时,我还不得不找到每个使用该实现的子类进行修改,工作量大大增加,这个时候就需要用到接口编程了,大致的代码如下。
基类 BaoWu
package dmh
{
publicclass BaoWu
{
//set 方法,可以动态的设定实现
public function set doSound( value:IDo ):void
{
this._doSound = value
}
public function get doSound():IDo
{
return this._doSound
}
//调用接口的方法
public function sound():void
{
doSound.sound()
}
//定义一个接口类型的变量
private var _doSound:IDo
}
}
算法族的接口 IDo
package dmh
{
public interface IDo
{
function sound():void
}
}
具体的实现类 Do1
package dmh
{
public class Do1 implements IDo
{
public function sound():void
{
trace("我是Do1,我唱中文歌")
}
}
}
具体的实现类 Do2
package dmh
{
public class Do1 implements IDo
{
public function sound():void
{
trace("我是Do2,我唱英文歌")
}
}
}
继承BaoWu类的子类 SubBaoWu1
package dmh
{
public class SubBaoWu1 extends BaoWu
{
public function SubBaoWu1()
{
super();
//在子类的构造函数中,定义基类中接口变量的实现类,即可
doSound = new Do1()
}
}
}
生成SubBaoWu1类的实例,并动态改变实现
var subBaoWu1:SubBaoWu1
subBaoWu1 = new SubBaoWu1()
subBaoWu1.sound()
subBaoWu1.doSound = new Do2()
subBaoWu1.sound()
trace结果
我是Do1,我唱中文歌
我是Do2,我唱英文歌
上一篇:
位操作学习心得一(as3.0) 下一篇:
关于Flash中数组的应用(as3.0)