之前有看過(guò)《ruby設(shè)計(jì)模式》,不過(guò)漸漸的都忘記了。現(xiàn)在買了一個(gè)大話設(shè)計(jì)模式,看起來(lái)不是那么枯燥,順便將代碼用ruby實(shí)現(xiàn)了一下。
簡(jiǎn)單工廠模式:
# -*- encoding: utf-8 -*-
#運(yùn)算類
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 '除數(shù)不能為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
這樣寫(xiě)的好處是降低耦合。
比如增加一個(gè)開(kāi)根號(hào)運(yùn)算的時(shí)候,只需要在工廠類中添加一個(gè)分支,并新建一個(gè)開(kāi)根號(hào)類,不會(huì)去動(dòng)到其他的類。
工廠方法模式:
# -*- encoding: utf-8 -*-
#運(yùn)算類
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 '除數(shù)不能為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
相比于簡(jiǎn)單工廠模式,這里的變化是移除了工廠類,取而代之的是具體的運(yùn)算工廠,分別是加法工廠、減法工廠、乘法工廠和除法工廠。
您可能感興趣的文章:- 設(shè)計(jì)模式中的觀察者模式在Ruby編程中的運(yùn)用實(shí)例解析
- 實(shí)例解析Ruby設(shè)計(jì)模式開(kāi)發(fā)中對(duì)觀察者模式的實(shí)現(xiàn)
- 深入剖析Ruby設(shè)計(jì)模式編程中對(duì)命令模式的相關(guān)使用
- Ruby設(shè)計(jì)模式編程中對(duì)外觀模式的應(yīng)用實(shí)例分析
- 詳解組合模式的結(jié)構(gòu)及其在Ruby設(shè)計(jì)模式編程中的運(yùn)用
- 設(shè)計(jì)模式中的模板方法模式在Ruby中的應(yīng)用實(shí)例兩則
- 實(shí)例解析Ruby設(shè)計(jì)模式編程中Strategy策略模式的使用
- 實(shí)例講解Ruby使用設(shè)計(jì)模式中的裝飾器模式的方法
- Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例
- 詳解Ruby設(shè)計(jì)模式編程中對(duì)單例模式的運(yùn)用
- Ruby設(shè)計(jì)模式編程之適配器模式實(shí)戰(zhàn)攻略
- Ruby使用設(shè)計(jì)模式中的代理模式與裝飾模式的代碼實(shí)例
- 解析proxy代理模式在Ruby設(shè)計(jì)模式開(kāi)發(fā)中的運(yùn)用