之前有看過《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 |
相比于簡單工廠模式,這里的變化是移除了工廠類,取而代之的是具體的運算工廠,分別是加法工廠、減法工廠、乘法工廠和除法工廠。