代码改变世界

不谈模式,只谈实现

2007-02-07 01:01 FantasySoft 阅读(...) 评论(...) 编辑 收藏
        回到家已经很晚了,还是很习惯性的上上博客园,看看大家一天精彩的文章,以求擦出些智慧的火花,让不太灵光的脑袋能够变得聪明些。这不,Justin兄的文章让我惺松的睡眼有了亮光。Justin的文章讲的是Strategy Pattern(策略模式),内容十分生动,让人看了之后对这个模式有了清晰的认识。而我也心痒痒的,想写些读后感什么的,咔咔~~

        说句实在话,我对模式了解得很少,策略模式也是听得多,用得少(这样写是为了顺口,估计连用都没用过吧)。针对Justin在文中提到的可爱人物——Joe遇到的问题,我用IronPython(Python)写了如下的代码,我想这样的解决方案会来得更加直接吧。
        首先,我定义一个鸭子的原型:
>>> class Duck:
    
def fly(self):
        
pass
    
def quack(self):
        
pass

        接着,我再定义两种飞的行为:
>>> def failToFly(arg):
     
print "I can't fly."

>>> def ableToFly(arg):
     
print "I can fly."



        最后,我定义RubberDuck和RedHeadDuck:
>>> class RubberDuck(Duck):
     Duck.fly 
= failToFly


>>> class RedHeadDuck(Duck):
     Duck.fly 
= ableToFly

         好,大功告成!让我们检验一下这两种鸭子是不是真的“飞”得其所:
>>> a = RubberDuck()
>>> a.fly()
I can
't fly.

>>> b = RedHeadDuck()
>>> b.fly()
I can fly.

        果然,该飞的能飞了,不该飞的还是乖乖地呆着。至于Quack方法的实现,我们也可以使用类似的方式,在这里就不赘述了。