最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Ruby中使用設計模式中的簡單工廠模式和工廠方法模式

 更新時間:2016年03月16日 11:53:28   作者:范孝鵬  
這篇文章主要介紹了Ruby中使用設計模式中的簡單工廠模式和工廠方法模式的示例,這兩種模式經(jīng)常被用于Ruby on Rails開發(fā)的結構設計中,需要的朋友可以參考下

之前有看過《ruby設計模式》,不過漸漸的都忘記了。現(xiàn)在買了一個大話設計模式,看起來不是那么枯燥,順便將代碼用ruby實現(xiàn)了一下。

簡單工廠模式:

# -*- 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 '除數(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

這樣寫的好處是降低耦合。
比如增加一個開根號運算的時候,只需要在工廠類中添加一個分支,并新建一個開根號類,不會去動到其他的類。

工廠方法模式:

# -*- 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 '除數(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

相比于簡單工廠模式,這里的變化是移除了工廠類,取而代之的是具體的運算工廠,分別是加法工廠、減法工廠、乘法工廠和除法工廠。

相關文章

最新評論

孟连| 巴林右旗| 富平县| 安吉县| 大洼县| 镇雄县| 洞口县| 连江县| 吴旗县| 治县。| 福建省| 南皮县| 喜德县| 通化县| 上蔡县| 肇庆市| 朝阳县| 泰宁县| 遵义县| 普陀区| 福鼎市| 新邵县| 深州市| 盐山县| 霍城县| 沁水县| 邢台市| 虹口区| 隆尧县| 全椒县| 达拉特旗| 桐庐县| 静乐县| 新营市| 张北县| 疏勒县| 化州市| 义乌市| 余庆县| 北票市| 马山县|