不谈模式,只谈实现
2007-02-07 01:01 FantasySoft 阅读(3600) 评论(9) 编辑 收藏 举报
回到家已经很晚了,还是很习惯性的上上博客园,看看大家一天精彩的文章,以求擦出些智慧的火花,让不太灵光的脑袋能够变得聪明些。这不,Justin兄的文章让我惺松的睡眼有了亮光。Justin的文章讲的是Strategy Pattern(策略模式),内容十分生动,让人看了之后对这个模式有了清晰的认识。而我也心痒痒的,想写些读后感什么的,咔咔~~
说句实在话,我对模式了解得很少,策略模式也是听得多,用得少(这样写是为了顺口,估计连用都没用过吧)。针对Justin在文中提到的可爱人物——Joe遇到的问题,我用IronPython(Python)写了如下的代码,我想这样的解决方案会来得更加直接吧。
首先,我定义一个鸭子的原型:
接着,我再定义两种飞的行为:
最后,我定义RubberDuck和RedHeadDuck:
好,大功告成!让我们检验一下这两种鸭子是不是真的“飞”得其所:
果然,该飞的能飞了,不该飞的还是乖乖地呆着。至于Quack方法的实现,我们也可以使用类似的方式,在这里就不赘述了。
说句实在话,我对模式了解得很少,策略模式也是听得多,用得少(这样写是为了顺口,估计连用都没用过吧)。针对Justin在文中提到的可爱人物——Joe遇到的问题,我用IronPython(Python)写了如下的代码,我想这样的解决方案会来得更加直接吧。
首先,我定义一个鸭子的原型:
>>> class Duck:
def fly(self):
pass
def quack(self):
pass
def fly(self):
pass
def quack(self):
pass
接着,我再定义两种飞的行为:
>>> def failToFly(arg):
print "I can't fly."
>>> def ableToFly(arg):
print "I can fly."
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
Duck.fly = failToFly
>>> class RedHeadDuck(Duck):
Duck.fly = ableToFly
好,大功告成!让我们检验一下这两种鸭子是不是真的“飞”得其所:
>>> a = RubberDuck()
>>> a.fly()
I can't fly.
>>> b = RedHeadDuck()
>>> b.fly()
I can fly.
>>> a.fly()
I can't fly.
>>> b = RedHeadDuck()
>>> b.fly()
I can fly.
果然,该飞的能飞了,不该飞的还是乖乖地呆着。至于Quack方法的实现,我们也可以使用类似的方式,在这里就不赘述了。