首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

Erlang与OO设计方式strategy模式

2012-10-29 
Erlang与OO设计模式strategy模式以前看过head first design patterns觉得是个不错的书,学习了一点设计模式

Erlang与OO设计模式strategy模式
以前看过head first design patterns觉得是个不错的书,学习了一点设计模式,现在弄Erlang了,十分想两者结合对比着看看,不为别的,体会两者之间的区别跟联系,看看世界到底是OO的,还是functional的 由于我并没有什么真正OO的编程经验,难免错误很多,大家批判着看好了。

先看第一个模式strategy模式,大致上来说,就是对接口编程而不是具体实现编程,如果每个子类都有的功能,自然继承可以,如果不全有则比较麻烦,加在父类,则那些不需要的子类莫名其妙的有了,如果仅仅是一个接口,很多的子类又得全部去实现,总之就是多个子类,有少量的方法,既想代码的重用,又要避免扰乱,所以有了这个模式,创建一个单独的行为类,来实现可能的方法,然后子类谁用哪个就初始化个具体的object就可以了。

到了functional编程当中,似乎不必要做为了创建行为,赋给不同的人,而创建一个单独的类,因为可以直接创建一堆的行为函数,直接放在那里,并直接拿过来用就可以了。根据书上的示例代码,改写成了这样的Erlang代码:

-module(duck).-compile(export_all).-record(duck, {fly, quake}).fly(Duck) when is_record(Duck, duck) ->    apply(Duck#duck.fly, []).quake(Duck) when is_record(Duck, duck) ->    apply(Duck#duck.quake, []).swim(_Duck) ->    io:format("All ducks float, even decoys!~n").fly_with_wings() -> io:format("I'm flying!~n").fly_no_way()     -> io:format("I can't fly~n").quake()      -> io:format("Quake~n").mute_quake() -> io:format("<< Silence >>~n").squeak()     -> io:format("Squeak~n").%% main functionmain() ->    Duck = mallard_duck(),    quake(Duck),    fly(Duck).mallard_duck() ->    #duck{fly = fun fly_with_wings/0,          quake = fun quake/0}.


实践中用到的时候,比如应该就是主要对于mallard_duck构造那里,如果在实际系统中,这里可以根据不同的属性配置不同的函数,然后丢回给系统,在真正叫到的时候就可以做出不同的行为了。

热点排行