一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

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

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

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

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

這篇文章主要介紹了Ruby中使用設(shè)計模式中的簡單工廠模式和工廠方法模式的示例,這兩種模式經(jīng)常被用于Ruby on Rails開發(fā)的結(jié)構(gòu)設(shè)計中,需要的朋友可以參考下

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

簡單工廠模式

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

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

工廠方法模式

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

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

延伸 · 閱讀

精彩推薦
  • Ruby剖析 Ruby 訪問控制

    剖析 Ruby 訪問控制

    前面,我們說 Ruby 沒有函數(shù),只有方法.而且實際上有不止一種方法.這一節(jié)我們介紹 訪問控制 (accesscontrols). 想想當我們在最高層而不是在一個類的定義里定義...

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

    Ruby迭代器的7種技巧分享

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

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

    Ruby環(huán)境下安裝使用bundler來管理多版本的gem

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

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

    簡要說明Ruby中的迭代器

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

    goldensun2772020-04-25
  • RubyCentOS中配置Ruby on Rails環(huán)境

    CentOS中配置Ruby on Rails環(huán)境

    經(jīng)過一個上午的折騰,終于把ROR環(huán)境在CentOS中搞定,繞了很多彎路,把文章寫下來總結(jié)一下 ...

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

    Ruby簡潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對象

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

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

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

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

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

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

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

    ruby教程網(wǎng)2962020-04-10
主站蜘蛛池模板: 欧美日韩国产最新一区二区 | 九九九九九九 | 国产最强大片免费视频 | 国产成人亚洲精品91专区手机 | 蹭蹭妈妈的朋友小说 | 国产亚洲女人久久久久久 | 91大片淫黄大片在线天堂 | 高清国产精品久久 | 饭冈加奈子黑人解禁在线播放 | 调教扩张宫颈女人惨叫 | 欧美又大又粗又爽视频 | 免费看一区二区三区 | 婷婷色在线 | 成人黄色免费网站 | 国产永久在线观看 | 精品国产人成亚洲区 | 69日本xxxhd| 国产精品久久国产精品99 gif | 免费观看美女被cao视频 | 狠狠色狠狠色综合日日小蛇 | 欧美另类变态 | a一级黄 | 国产无限制自拍 | 国产精彩视频 | 秒播影视 午夜福利毛片 | 精品无码国产AV一区二区三区 | 亚洲AV无码一区二区三区乱子伦 | 精品国产乱码久久久久久免费流畅 | 免费永久视频 | 四虎永久网址在线观看 | 国产伊人久久 | 欧美日韩国产亚洲一区二区三区 | 天天做天天爽天天谢 | 图片专区亚洲欧美另类 | 亚洲人成伊人成综合网久久 | 日韩毛片大全免费高清 | 亚洲国产精久久久久久久 | 国产精品福利 | 亚洲精品国产精品精 | 爱豆传媒最新视频国产 | 日产乱码2021永久手机版 |