strategy模式,对java有一定了解的JE友,都应该熟悉,这里不作过多的介绍.
下面是ruby版本的strategy模式体现,参考Head first design 设计模式中文版本第一章策略模式.由于ruby相对于java的不同,没有了接口的概念,也没有抽象类的概念,但是我闷可以变相的实现抽象和接口的应用,在ruby中
#
#鸭子抽象类
class Duck
attr_accessor :fly_behavior, :quack_behavior
def display
raise "this is a abstract method"
end
def perform_fly
if fly_behavior.is_a?(FlyBehavior)
fly_behavior.fly
end
end
def perform_quack
if quack_behavior.kind_of?(QuackBehavior)
quack_behavior.quack
end
end
end
#
#具体鸭子类
class MallarDuck < Duck
def initialize
@fly_behavior = FlyWithWings.new
@quack_behavior = Quack.new
end
def display
puts "I'm a real Mallard duck"
end
end
#
#具体鸭子类
class ModelDuck < Duck
def initialize
@fly_behavior = FlyNoWay.new
@quack_behavior = Quack.new
end
def display
puts "I'm a real Model duck"
end
end
#
#抽象类,具体方法让子类去实现
class FlyBehavior
def fly
raise "Abstract method call"
end
end
class QuackBehavior
def quack
raise "Abstract method call"
end
end
#
#实现抽象类行为的子类
class FlyWithWings < FlyBehavior
def fly
puts "I'm flying!!!"
end
end
class FlyNoWay < FlyBehavior
def fly
puts "I can't fly!!"
end
end
class FlyRocketPowered < FlyBehavior
def fly
puts "I'm flying with a rocket"
end
end
class Quack < QuackBehavior
def quack
puts "Quack!!!"
end
end
#
#测试方法
require 'benchmark'
puts "strategry pattern start!!!"
mallard = MallarDuck.new
mallard.display
mallard.perform_fly
mallard.perform_quack
modeld = ModelDuck.new
modeld.display
modeld.perform_fly
modeld.fly_behavior = FlyRocketPowered.new
modeld.perform_fly
输出---------------------
strategry pattern start!!!
I'm a real Mallard duck
I'm flying!!!
Quack!!!
I'm a real Model duck
I can't fly!!
I'm flying with a rocket
多多交流谢谢!
分享到:
- 2008-07-31 15:28
- 浏览 1741
- 评论(8)
- 论坛回复 / 浏览 (8 / 2920)
- 查看更多
相关推荐
Apply design patterns to modern C++ programming Use creational patterns of builder, factories, prototype and singleton Implement structural patterns such as adapter, bridge, decorator, facade and ...
★第1章至第11章陆续介绍了设计模式:Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton、Command、Adapter、Facade、TemplatMethod、Iterator、Composite、State、Proxy。 ★第12章介绍...
15. 组合模式(Strategy Pattern):定义了一系列算法,并将每个算法封装起来,使它们可以互相替换,让算法的变化独立于使用算法的客户。 以上每个设计模式都包含了C#的源代码实现,读者可以通过阅读和实践这些代码...
Addison.Wesley.Design.Patterns.in.Ruby.Dec.2007 高清PDF英文版
The topic of Design Patterns sounds dry, academically constipated and, in all honesty, done to death in almost every programming language imaginable—including programming languages such as JavaScript...
design patterns elements of reusable object-oriented software.pdf 经典的书籍,比较完美的版本了
Design Patterns Elements of Reusable Object-Oriented Software 英文版 (chm)
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
这个压缩包“java-design-patterns-master”显然是一个专注于Java设计模式的学习资源,旨在帮助开发者深入理解和应用这些模式。下面我们将详细探讨Java设计模式及其在实际开发中的应用。 1. **单例模式(Singleton...
**设计模式**(Design Patterns)是软件工程中的一个重要概念,它是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。本章节将从多个角度对设计模式进行深入探讨。 #### 二、设计模式的基本定义 ...
《Design Patterns in Ruby Dec 2007》是关于Ruby编程语言中设计模式的一份珍贵资料,这份2007年发布的PDF文档深入探讨了如何在Ruby语言中应用经典的设计模式。设计模式是软件工程中经过实践证明的有效解决方案模板...
《设计模式:可复用面向对象软件的基础》是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师合著的经典之作,通常被称为“Gang of Four”(GoF)的设计模式书籍。这本书深入探讨了面向对象设计...
"Laracasts - design-patterns-in-php.torrent"则可能是一个BT种子文件,用于通过BitTorrent协议下载整个课程的大型数据包,这通常包括所有视频讲座和其他相关文件。 在课程"设计模式在PHP中"中,你可能会学到以下...
Design_Patterns Elements of Reusable Object-Oriented Software
- **抽象工厂模式(Abstract Factory)**:提供一个接口用于创建一系列相关或相互依赖的对象,而无需指定它们具体的类。 - **建造者模式(Builder)**:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以...