专注于 ActionScript 3.0 在各应用领域的研究。
« 推荐一本书《来自管理高层的故事--职业经理人必须回答的10个问题》D2归来,分享7yue关于flashplayer10新特性介绍的课件 »

设计模式—策略模式(学习笔记)

          几个设计模式的原则

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 Do2 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,我唱英文歌

  • quote 1.qitercom
  • 哥们。发现你个笔误....具体的实现类 Do2.......类名居然还是Do1 错了吧...
    呵呵
  • 2008-10-30 18:20:20 回复该留言
  • quote 3.xdjun
  • 初学者请教一下,在flash中实现mac中的翻页效果的编码怎么写
  • 2008-11-24 20:38:44 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Spirit Build 80722 Code detection by Codefense

Copyright 2008 DMH2002's Blog Some Rights Reserved.沪ICP备07021739号