在Ruby中,單例模式是一種創建單個類實例的實用方法。它與其他設計模式的結合可以幫助我們更好地組織和管理代碼。以下是一些常見的模式與單例模式的結合:
工廠模式用于創建對象,而單例模式確保只創建一個實例。將兩者結合,我們可以創建一個單例工廠,用于生成特定類型的單個實例。
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
# 使用單例工廠創建實例
a = SingletonFactory.create_instance('A')
b = SingletonFactory.create_instance('B')
puts a.value # 輸出 1
puts b.value # 輸出 2
觀察者模式用于在對象之間建立一對多的依賴關系,當一個對象改變狀態時,所有依賴它的對象都會收到通知并自動更新。將單例模式應用于觀察者模式中的主題(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
這些示例展示了如何將單例模式與其他設計模式結合使用,以便更好地組織和管理代碼。當然,實際應用中可能還有其他模式與單例模式的結合方式。