`
wj2me
  • 浏览: 12617 次
  • 性别: Icon_minigender_1
  • 来自: 杜塞尔多夫
最近访客 更多访客>>
社区版块
存档分类
最新评论

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 function
main() ->
    Duck = mallard_duck(),
    quake(Duck),
    fly(Duck).

mallard_duck() ->
    #duck{fly = fun fly_with_wings/0,
          quake = fun quake/0}.



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

相关推荐

    Erlang程序设计(第2版)1

    【Erlang程序设计(第2版)】是由Erlang之父Joe Armstrong撰写的一本经典著作,专注于介绍Erlang编程语言在并发、分布式和容错系统中的应用。本书适用于初学者和有一定经验的Erlang程序员。作者在书中讨论了如何利用...

    erlang程序设计与入门

    **Erlang程序设计与入门** Erlang是一种并发、函数式编程语言,主要用于构建分布式、高可用性、容错性强的系统。它的设计灵感来源于电信行业的需求,由瑞典爱立信公司于1986年开发。Erlang以其独特的并发模型、轻量...

    Erlang程序设计及源码

    对于初学者,可以通过阅读《Erlang程序设计》这本书了解基本语法、数据类型、控制结构、模式匹配以及Erlang的并发特性。同时,结合源码分析,可以提升实战能力。 总之,这份资源为Erlang初学者提供了全面的学习...

    [Erlang程序设计]源代码

    OTP(Open Telephony Platform)是Erlang的标准库,包含了一系列设计模式和库,如GenServer、GenEvent、Supervisor等。这些模式提供了构建可靠分布式系统的蓝图。在实例代码中,你可能会发现如何使用OTP组件来构建可...

    erlang 语言程序设计

    ”这意味着Erlang的设计原则与现实世界中的对象行为相一致,通过编写能够并行运行的程序来模拟现实世界的复杂性和动态变化。这种设计理念使得Erlang特别适合构建大规模分布式系统。 #### 三、Erlang语言的基本概念 ...

    Erlang程序设计,包含完整目录和全套源码

    这个压缩包包含了Erlang程序设计的完整目录和源码,是学习和理解Erlang编程的重要资源。 Erlang的并发特性源于其轻量级进程模型,每个进程都有自己的内存空间,进程间通信通过消息传递实现,这种设计降低了并发执行...

    erlang 程序设计 源码

    在深入理解Erlang程序设计的源码之前,我们需要了解Erlang的一些核心概念和特性。 1. **并发性**:Erlang的并发模型基于轻量级进程(Lightweight Processes,LWP),它们类似于操作系统中的线程,但资源消耗小得多...

    erlang程序设计

    5. OTP(Open Telecom Platform):OTP是Erlang生态系统的一部分,提供了库、设计模式和开发工具,帮助开发者构建高度可靠和可扩展的系统。 6. BEAM虚拟机:Erlang代码编译成BEAM字节码,在Erlang虚拟机上运行。...

    ergo:使用Golang中ErlangOTP的技术和设计模式创建网状网络的框架

    Ergo Framework实现了诸如GenServer / Supervisor / Application类的OTP设计模式,并使您能够创建与Erlang基础架构进行本地集成的高性能和可靠的应用程序 产品特点 Erlang节点(运行单节点/) (以摆脱erlang的...

    Erlang程序设计中文版

    **Erlang程序设计中文版**是一本深入探讨Erlang编程语言的书籍,旨在帮助开发者理解和掌握这种在并发处理和分布式系统中广泛使用的语言。Erlang以其强大的错误恢复能力、热代码替换以及对大规模并发的支持而闻名,是...

    erlang 设计指南

    **Erlang设计指南** Erlang是一种面向并发的、函数式编程...通过阅读"Pragmatic Programming Erlang",你可以掌握Erlang的关键概念,如进程、消息传递、模式匹配、OTP和分布式系统设计,从而提升你的并发编程技能。

    Erlang程序设计 第2版

    Erlang程序设计 第2版 Erlang程序设计 第2版Erlang程序设计 第2版

    erlang编程 Introducing Erlang

    Erlang的并发模型和 otp 设计模式使得系统能够轻松实现负载均衡和故障切换。当一个节点或进程失败时,系统可以重新分配工作,确保服务的连续性。 ### 9. BEAM虚拟机 BEAM是Erlang运行时系统的名称,全称为伯尔尼...

    Erlang程序设计及源代码打包

    **Erlang程序设计概述** Erlang是一种面向并发的、函数式的编程语言,由瑞典电信设备制造商Ericsson开发,主要用于构建高可用性、容错性强的分布式系统。《Erlang程序设计》这本书,作者是Joe Armstrong,他是...

    Erlang程序设计(第二版)及源码

    本书由Erlang之父Joe Armstrong编写,是毋庸置疑的经典著作。书中兼顾了顺序编程、并发编程和分布式编程,重点介绍如何编写并发和分布式的Erlang程序以及如何在多核CPU上自动加速程序,并深入地讨论了开发Erlang应用...

    Erlang与Mysql对接

    在Erlang中,这种接口通常遵循JDBC或ODBC风格的API,尽管Erlang并不直接支持这些接口,而是有类似的设计模式。 对接过程主要包括以下步骤: 1. **安装驱动**:首先,你需要在Erlang环境中安装这个驱动库。这可能...

    Erlang程序设计].源代码

    6. 数据类型与模式匹配:Erlang的数据类型包括原子(atom)、整数、浮点数、列表、元组等,模式匹配是其语法的一大特色。源代码将展示如何通过模式匹配来解构数据结构和执行条件分支。 7. BEAM虚拟机:Erlang运行在...

Global site tag (gtag.js) - Google Analytics