激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Ruby - Ruby中使用設計模式中的簡單工廠模式和工廠方法模式

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

2020-05-07 11:07范孝鵬 Ruby

這篇文章主要介紹了Ruby中使用設計模式中的簡單工廠模式和工廠方法模式的示例,這兩種模式經常被用于Ruby on Rails開發的結構設計中,需要的朋友可以參考下

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

簡單工廠模式

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# -*- 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

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

工廠方法模式

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# -*- 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 沒有函數,只有方法.而且實際上有不止一種方法.這一節我們介紹 訪問控制 (accesscontrols). 想想當我們在最高層而不是在一個類的定義里定義...

    ruby教程網3572020-04-08
  • RubyRuby迭代器的7種技巧分享

    Ruby迭代器的7種技巧分享

    這篇文章主要介紹了Ruby迭代器的7種技巧分享,Ruby中的迭代器非常人性化,本文既是講解了7個技巧也是講解了7種迭代器,需要的朋友可以參考下 ...

    腳本之家4782020-04-20
  • RubyRuby環境下安裝使用bundler來管理多版本的gem

    Ruby環境下安裝使用bundler來管理多版本的gem

    這篇文章主要介紹了Ruby環境下安裝使用bundler來管理多版本的gem的方法,舉了Ruby On Rails中的應用實例來進行演示,需要的朋友可以參考下 ...

    日拱一卒4332020-05-10
  • Ruby簡要說明Ruby中的迭代器

    簡要說明Ruby中的迭代器

    這篇文章主要介紹了Ruby中的迭代器,迭代器的概念在動態語言的編程中十分重要,文章中介紹了Ruby中的each迭代器和collect迭代器,需要的朋友可以參考下 ...

    goldensun2772020-04-25
  • RubyCentOS中配置Ruby on Rails環境

    CentOS中配置Ruby on Rails環境

    經過一個上午的折騰,終于把ROR環境在CentOS中搞定,繞了很多彎路,把文章寫下來總結一下 ...

    可樂加糖4762020-04-12
  • RubyRuby簡潔學習筆記(一):字符串、數字、類和對象

    Ruby簡潔學習筆記(一):字符串、數字、類和對象

    這篇文章主要介紹了Ruby簡潔學習筆記(一):字符串、數字、類和對象,本文是學習筆記第一篇,需要的朋友可以參考下 ...

    腳本之家2472020-04-20
  • RubyRuby設計模式編程中使用Builder建造者模式的實例

    Ruby設計模式編程中使用Builder建造者模式的實例

    這篇文章主要介紹了Ruby設計模式編程中使用Builder建造者模式的實例,建造者模式將一個復雜對象的構造與它的表示分離,使同樣的構建過程可以創建不同的表...

    范孝鵬2192020-05-07
  • RubyRuby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼

    Ruby進行文件信息輸出實例代碼,數據是隨機的,所以每次的記錄都會不同。 ...

    ruby教程網2962020-04-10
主站蜘蛛池模板: 毛片国产 | 亚洲网站在线观看视频 | 欧美顶级毛片在线播放小说 | 99亚洲国产精品 | 一级做人爱c黑人影片 | 中文字幕国 | www久久国产| 欧美视频在线一区二区三区 | 日韩精品一区二区免费视频 | 一级国产免费 | 国产视频在线观看一区二区三区 | www.精品视频 | 偿还的影视高清在线观看 | 午夜伦情电午夜伦情电影 | 黄色片在线观看网站 | 亚洲电影在线观看高清免费 | 污污的视频在线观看 | 在线观看国产网站 | 91久久久久久久一区二区 | av在线免费观看网 | 久久亚色 | 国产精品欧美久久久久一区二区 | av电影免费在线 | 九九热九九爱 | 黑人一区二区三区四区五区 | 欧美中文字幕一区二区三区亚洲 | 91精品观看91久久久久久国产 | 成人精品视频在线 | 精品成人免费一区二区三区 | 久久精品国产99国产精品亚洲 | 国产午夜亚洲精品 | 国产精品一区二区三区在线看 | 91看片片 | 色七七久久影院 | 久久久久久久久国产 | 激情黄页 | 免费看欧美黑人毛片 | 久久国产一二三 | 久久国产在线观看 | 九九精品久久 | 成品片a免费直接观看 |