• 【设为首页】
  • 【收藏闪客居】
当前位置:主页 > FLASH AS 编程 > AS基础篇 > AS 3.0 > 文章内容
  • 设计模式—策略模式(学习笔记)

  • 来源:dmh2002.com 作者:dmh2002 2008-10-23 【 】 TAG:

     几个设计模式的原则
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)
  • 用户名:新注册) 密码: 匿名评论
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)

Copyright © 2006-2008 flashas.net All Rights Reserved.
网站内容咨询: admin#flashas.net (#为@) 联系QQ:40777822 浙ICP备06033001号
(本网站最佳浏览解析度为1024*768, 建议使用IE 6.0或以上版本浏览器。)