溫馨提示×

Ruby單例模式如何與其他模式結(jié)合

小樊
81
2024-11-01 21:11:07
欄目: 編程語言

在Ruby中,單例模式是一種創(chuàng)建單個類實例的實用方法。它與其他設(shè)計模式的結(jié)合可以幫助我們更好地組織和管理代碼。以下是一些常見的模式與單例模式的結(jié)合:

  1. 工廠模式與單例模式結(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
  1. 觀察者模式與單例模式結(jié)合:

觀察者模式用于在對象之間建立一對多的依賴關(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é)合方式。

0