`
wj2me
  • 浏览: 12747 次
  • 性别: 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特别适合构建大规模分布式系统。 #### 三、Erlang语言的基本概念 ...

    erlang 程序设计 源码

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

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

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

    erlang 设计指南

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

    erlang编程 Introducing Erlang

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

    Erlang与Mysql对接

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

    Match在JavaScript中实现类似于Erlang的模式匹配

    这种设计使得我们能够以Erlang风格的模式匹配来处理JavaScript的数据。 总结来说,虽然JavaScript没有内置的模式匹配机制,但我们可以通过正则表达式、`switch`和`if`语句以及第三方库如`match-master`来实现类似的...

    erlang资源

    2. ** OTP(Open Telecom Platform)**:OTP是Erlang生态系统的一部分,提供了设计模式、库和工具,用于构建可靠和可扩展的系统。书中可能讲解了OTP的设计原则和组件,如GenServer、GenEvent和Supervisor等。 3. **...

    Erlang_OTP_设计原理(含目录).pdf

    Erlang OTP设计原理是一份深入探讨Erlang/OTP(Open Telecom Platform)框架中设计模式和组织代码原则的文档。Erlang OTP作为Erlang语言的中间件平台,提供了构建可扩展和容错系统的标准方法。 文档开篇就介绍了...

    Erlang与C构建的节点通讯完整例子

    Windows下Erlang与C构建的节点通讯完整例子,包含cnode工程项目,erlang引用例子。 配套文章:http://blog.csdn.net/mycwq/article/details/40836273

    erlang_版本24.3.4.4

    - **OTP(开放电信平台)**:Erlang OTP是一套库和设计原则,提供了构建可靠系统的框架,包括Mnesia数据库、Event Manager、Supervisor和GenServer等行为模块。 学习Erlang时,你需要掌握以下核心概念: - **BEAM...

    xiandiao_erlang_Erlang课后习题_

    4. **错误处理与恢复**:习题可能设计为在遇到错误时,系统能优雅地处理并恢复,让学习者理解Erlang中的错误处理策略。 5. **模块化编程**:Erlang的模块系统可以帮助组织代码,习题可能要求学习者将功能分解到多个...

    erlang趣学指南

    Erlang是一门专为构建并发、容错的分布式系统而设计的编程语言,最早由瑞典电信设备公司爱立信所开发。其关键特性包括轻量级进程、消息传递、容错机制以及一个用于构建可靠系统的函数库和中间件,统称为Open Telecom...

    erlang与rabbitmq官方下载教程

    ### Erlang与RabbitMQ官方下载教程 #### 一、Erlang下载及安装 **1.1 Erlang简介** Erlang是一种通用、并发、容错性强的编程语言,特别适合开发高可用性系统。它最初由爱立信公司为解决电信系统的实时通信问题而...

    erlang25.0 windows版本

    - **OTP(Open Telephony Platform)**:Erlang的核心库,包含大量预先设计的模块,用于处理常见的系统任务,如错误处理、分布式计算和监控。 - **行为模式**:如GenServer、GenEvent和Gen_fsm,它们定义了Erlang中...

    erlang programming

    4. **错误处理与容错**:Erlang的设计哲学是“失败快速,恢复快速”。这意味着系统应该预期到错误并准备好优雅地处理它们,而不是避免错误。Erlang提供了异常处理机制和错误恢复策略,这在面对软件错误时显得尤为...

    Erlang23_3.zip

    Linux是Erlang广泛应用的平台之一,因为其开源特性和对并发处理的良好支持与Erlang的理念相契合。 在实际使用Erlang时,开发者会遇到诸如OTP(Open Telecom Platform)这样的核心组件,它提供了一套标准库和框架,...

    Erlang和RabbitMQ

    **Erlang与RabbitMQ详解** Erlang是一种由Ericsson公司开发的并发性、分布式和面向对象的编程语言,特别适用于构建高可靠性、容错性和可扩展性的系统。其设计灵感来源于函数式编程,使得Erlang在处理并发问题上表现...

    Erlang_CNode用户指

    Erlang的并发模型基于轻量级进程(Lightweight Process,LWP),每个进程之间通过异步的消息传递进行通信,这种模式非常适合构建大规模并发系统。 CNode是Erlang生态系统中的一个重要组件,它允许Erlang虚拟机(VM...

Global site tag (gtag.js) - Google Analytics