`
noahgenius
  • 浏览: 137971 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

proxy在flash开发实践中的运用

阅读更多
    proxy就是代理,也可以叫委托。说通俗点,就是委托第三方给原来的功能动态的添加一些新的功能,但是对于使用者来说却没有丝毫影响,原来的使用方法同样使用于新功能。呵呵,听起来有点玄,其实用到开发上会非常有用,废话不说看代码。

有一个类User代表用户
class User
{
     public function use(p:IProduct):Void
     {
         p.getIt(); //使用产品
     }
}


产品类CProduct以及接口IProduct
Interface IProduct
{
     function getIt():Void
}
class CProduct implements IProduct
{
     public function getIt():Void
     {
         //code in CProduct   //旧的实现功能
     }
}


这是一个典型的基于接口的编程方法,使用也简单:
var user:User = new User();
user.use(new CProduct());

但是功能是可以变的,如果现在我们需要在旧功能上添加一种新的功能,该怎么办,再重写一个实现类吗(工厂模式),这样就不得不把原有的功能再写一遍。而且,原来的功能还要使用,可以说是两种新老功能并存。更不能修改原有的功能。在这里用proxy就比较合适了。
class CNewProduct extends CProduct
{
     public function getIt():Void   //重写原来的方法
     {
          //添加新功能
          super.getIt();   //关键是这里,使用了父类的同名方法
     }
}

proxy在这里使用了继承的方式(继承只是一种实现方式而已)扩展了功能,同时对原有的功能没有任何印象。再看看如何使用
var user:User = new User();
user.use(new CNewProduct());

呵呵,看到了吗,按需使用,原来的代码丝毫不做修改,还是使用use方法,原有的功能也能保留,代码也做到了最大限度的重用。如果以后还要扩展,使用这样的方法将丝毫不会对原系统有任何影响。

小总结一下:
proxy目的:动态地添加新功能,同时保持调用方式不变。
适用范围:
1 动态地添加新功能
2 新功能的使用和原有的方式一致

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics