Ruby中使用設(shè)計(jì)模式中的簡(jiǎn)單工廠模式和工廠方法模式
之前有看過(guò)《ruby設(shè)計(jì)模式》,不過(guò)漸漸的都忘記了?,F(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
這樣寫的好處是降低耦合。
比如增加一個(gè)開根號(hào)運(yùn)算的時(shí)候,只需要在工廠類中添加一個(gè)分支,并新建一個(gè)開根號(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ì)模式開發(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ì)模式開發(fā)中的運(yùn)用
相關(guān)文章
Ruby on Rails遷移時(shí)的一些注意事項(xiàng)
這篇文章主要介紹了Ruby on Rails遷移時(shí)的一些注意事項(xiàng),包括建議的使用change方法取代up與down方法等細(xì)節(jié),需要的朋友可以參考下2015-08-08
Python的Flask框架中SERVER_NAME域名項(xiàng)的配置教程
SERVER_NAME項(xiàng)在Flask的路由配置中至關(guān)重要,特別是在配置絕對(duì)url和子域名的操作中,這里我們就來(lái)看一下Python的Flask框架中SERVER_NAME項(xiàng)的配置教程:2016-06-06
Linux系統(tǒng)上配置Nginx+Ruby on Rails+MySQL超攻略
這篇文章主要介紹了Linux系統(tǒng)上配置Nginx+Ruby on Rails+MySQL超攻略,用到了RVM,此種服務(wù)器搭建配置極力推薦!需要的朋友可以參考下2015-08-08

