以前看过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构造那里,如果在实际系统中,这里可以根据不同的属性配置不同的函数,然后丢回给系统,在真正叫到的时候就可以做出不同的行为了。
分享到:
相关推荐
【Erlang程序设计(第2版)】是由Erlang之父Joe Armstrong撰写的一本经典著作,专注于介绍Erlang编程语言在并发、分布式和容错系统中的应用。本书适用于初学者和有一定经验的Erlang程序员。作者在书中讨论了如何利用...
”这意味着Erlang的设计原则与现实世界中的对象行为相一致,通过编写能够并行运行的程序来模拟现实世界的复杂性和动态变化。这种设计理念使得Erlang特别适合构建大规模分布式系统。 #### 三、Erlang语言的基本概念 ...
在深入理解Erlang程序设计的源码之前,我们需要了解Erlang的一些核心概念和特性。 1. **并发性**:Erlang的并发模型基于轻量级进程(Lightweight Processes,LWP),它们类似于操作系统中的线程,但资源消耗小得多...
Ergo Framework实现了诸如GenServer / Supervisor / Application类的OTP设计模式,并使您能够创建与Erlang基础架构进行本地集成的高性能和可靠的应用程序 产品特点 Erlang节点(运行单节点/) (以摆脱erlang的...
**Erlang设计指南** Erlang是一种面向并发的、函数式编程...通过阅读"Pragmatic Programming Erlang",你可以掌握Erlang的关键概念,如进程、消息传递、模式匹配、OTP和分布式系统设计,从而提升你的并发编程技能。
Erlang的并发模型和 otp 设计模式使得系统能够轻松实现负载均衡和故障切换。当一个节点或进程失败时,系统可以重新分配工作,确保服务的连续性。 ### 9. BEAM虚拟机 BEAM是Erlang运行时系统的名称,全称为伯尔尼...
在Erlang中,这种接口通常遵循JDBC或ODBC风格的API,尽管Erlang并不直接支持这些接口,而是有类似的设计模式。 对接过程主要包括以下步骤: 1. **安装驱动**:首先,你需要在Erlang环境中安装这个驱动库。这可能...
这种设计使得我们能够以Erlang风格的模式匹配来处理JavaScript的数据。 总结来说,虽然JavaScript没有内置的模式匹配机制,但我们可以通过正则表达式、`switch`和`if`语句以及第三方库如`match-master`来实现类似的...
2. ** OTP(Open Telecom Platform)**:OTP是Erlang生态系统的一部分,提供了设计模式、库和工具,用于构建可靠和可扩展的系统。书中可能讲解了OTP的设计原则和组件,如GenServer、GenEvent和Supervisor等。 3. **...
Erlang OTP设计原理是一份深入探讨Erlang/OTP(Open Telecom Platform)框架中设计模式和组织代码原则的文档。Erlang OTP作为Erlang语言的中间件平台,提供了构建可扩展和容错系统的标准方法。 文档开篇就介绍了...
Windows下Erlang与C构建的节点通讯完整例子,包含cnode工程项目,erlang引用例子。 配套文章:http://blog.csdn.net/mycwq/article/details/40836273
- **OTP(开放电信平台)**:Erlang OTP是一套库和设计原则,提供了构建可靠系统的框架,包括Mnesia数据库、Event Manager、Supervisor和GenServer等行为模块。 学习Erlang时,你需要掌握以下核心概念: - **BEAM...
4. **错误处理与恢复**:习题可能设计为在遇到错误时,系统能优雅地处理并恢复,让学习者理解Erlang中的错误处理策略。 5. **模块化编程**:Erlang的模块系统可以帮助组织代码,习题可能要求学习者将功能分解到多个...
Erlang是一门专为构建并发、容错的分布式系统而设计的编程语言,最早由瑞典电信设备公司爱立信所开发。其关键特性包括轻量级进程、消息传递、容错机制以及一个用于构建可靠系统的函数库和中间件,统称为Open Telecom...
### Erlang与RabbitMQ官方下载教程 #### 一、Erlang下载及安装 **1.1 Erlang简介** Erlang是一种通用、并发、容错性强的编程语言,特别适合开发高可用性系统。它最初由爱立信公司为解决电信系统的实时通信问题而...
- **OTP(Open Telephony Platform)**:Erlang的核心库,包含大量预先设计的模块,用于处理常见的系统任务,如错误处理、分布式计算和监控。 - **行为模式**:如GenServer、GenEvent和Gen_fsm,它们定义了Erlang中...
4. **错误处理与容错**:Erlang的设计哲学是“失败快速,恢复快速”。这意味着系统应该预期到错误并准备好优雅地处理它们,而不是避免错误。Erlang提供了异常处理机制和错误恢复策略,这在面对软件错误时显得尤为...
Linux是Erlang广泛应用的平台之一,因为其开源特性和对并发处理的良好支持与Erlang的理念相契合。 在实际使用Erlang时,开发者会遇到诸如OTP(Open Telecom Platform)这样的核心组件,它提供了一套标准库和框架,...
**Erlang与RabbitMQ详解** Erlang是一种由Ericsson公司开发的并发性、分布式和面向对象的编程语言,特别适用于构建高可靠性、容错性和可扩展性的系统。其设计灵感来源于函数式编程,使得Erlang在处理并发问题上表现...
Erlang的并发模型基于轻量级进程(Lightweight Process,LWP),每个进程之间通过异步的消息传递进行通信,这种模式非常适合构建大规模并发系统。 CNode是Erlang生态系统中的一个重要组件,它允许Erlang虚拟机(VM...