之前有看过《ruby设计模式》,不过渐渐的都忘记了。现在买了一个大话设计模式,看起来不是那么枯燥,顺便将代码用ruby实现了一下。
简单工厂模式:
# -*- encoding: utf-8 -*-
#运算类
class Operation
attr_accessor :number_a,:number_b
def initialize(number_a = nil, number_b = nil)
@number_a = number_a
@number_b = number_b
end
def result
0
end
end
#加法类
class OperationAdd Operation
def result
number_a + number_b
end
end
#减法类
class OperationSub Operation
def result
number_a - number_b
end
end
#乘法类
class OperationMul Operation
def result
number_a * number_b
end
end
#除法类
class OperationDiv Operation
def result
raise '除数不能为0' if number_b == 0
number_a / number_b
end
end
#工厂类
class OperationFactory
def self.create_operate(operate)
case operate
when '+'
OperationAdd.new()
when '-'
OperationSub.new()
when '*'
OperationMul.new()
when '/'
OperationDiv.new()
end
end
end
oper = OperationFactory.create_operate('/')
oper.number_a = 1
oper.number_b = 2
p oper.result
这样写的好处是降低耦合。
比如增加一个开根号运算的时候,只需要在工厂类中添加一个分支,并新建一个开根号类,不会去动到其他的类。
工厂方法模式:
# -*- encoding: utf-8 -*-
#运算类
class Operation
attr_accessor :number_a,:number_b
def initialize(number_a = nil, number_b = nil)
@number_a = number_a
@number_b = number_b
end
def result
0
end
end
#加法类
class OperationAdd Operation
def result
number_a + number_b
end
end
#减法类
class OperationSub Operation
def result
number_a - number_b
end
end
#乘法类
class OperationMul Operation
def result
number_a * number_b
end
end
#除法类
class OperationDiv Operation
def result
raise '除数不能为0' if number_b == 0
number_a / number_b
end
end
module FactoryModule
def create_operation
end
end
#加法工厂
class AddFactory
include FactoryModule
def create_operation
OperationAdd.new
end
end
#减法工厂
class SubFactory
include FactoryModule
def create_operation
OperationSub.new
end
end
#乘法工厂
class MulFactory
include FactoryModule
def create_operation
OperationMul.new
end
end
#除法工厂
class DivFactory
include FactoryModule
def create_operation
OperationDiv.new
end
end
factory = AddFactory.new
oper = factory.create_operation
oper.number_a = 1
oper.number_b = 2
p oper.result
相比于简单工厂模式,这里的变化是移除了工厂类,取而代之的是具体的运算工厂,分别是加法工厂、减法工厂、乘法工厂和除法工厂。
您可能感兴趣的文章:- 设计模式中的观察者模式在Ruby编程中的运用实例解析
- 实例解析Ruby设计模式开发中对观察者模式的实现
- 深入剖析Ruby设计模式编程中对命令模式的相关使用
- Ruby设计模式编程中对外观模式的应用实例分析
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- Ruby设计模式编程中使用Builder建造者模式的实例
- 详解Ruby设计模式编程中对单例模式的运用
- Ruby设计模式编程之适配器模式实战攻略
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 解析proxy代理模式在Ruby设计模式开发中的运用