在Ruby中,單例模式是一種創(chuàng)建單個類實例的實用方法。它與其他設(shè)計模式的結(jié)合可以幫助我們更好地組織和管理代碼。以下是一些常見的模式與單例模式的結(jié)合:
工廠模式用于創(chuàng)建對象,而單例模式確保只創(chuàng)建一個實例。將兩者結(jié)合,我們可以創(chuàng)建一個單例工廠,用于生成特定類型的單個實例。
class SingletonFactory
@@instance = nil
def self.create_instance(type)
if @@instance.nil?
case type
when 'A'
@@instance = SingletonA.new
when 'B'
@@instance = SingletonB.new
end
end
@@instance
end
end
class SingletonA
def initialize
@value = 1
end
end
class SingletonB
def initialize
@value = 2
end
end
# 使用單例工廠創(chuàng)建實例
a = SingletonFactory.create_instance('A')
b = SingletonFactory.create_instance('B')
puts a.value # 輸出 1
puts b.value # 輸出 2
觀察者模式用于在對象之間建立一對多的依賴關(guān)系,當(dāng)一個對象改變狀態(tài)時,所有依賴它的對象都會收到通知并自動更新。將單例模式應(yīng)用于觀察者模式中的主題(Subject)類,可以確保只有一個主題實例,同時方便地管理觀察者列表。
class SingletonObserver
@@instance = nil
def self.instance
if @@instance.nil?
@@instance = SingletonObserver.new
end
@@instance
end
def initialize
@observers = []
end
def add_observer(observer)
@observers << observer
end
def remove_observer(observer)
@observers.delete(observer)
end
def notify_observers
@observers.each do |observer|
observer.update
end
end
end
class Observer
def update
puts "Observer notified"
end
end
# 使用單例觀察者
observer = Observer.new
SingletonObserver.instance.add_observer(observer)
SingletonObserver.instance.notify_observers
這些示例展示了如何將單例模式與其他設(shè)計模式結(jié)合使用,以便更好地組織和管理代碼。當(dāng)然,實際應(yīng)用中可能還有其他模式與單例模式的結(jié)合方式。