8

クラスが外部ライブラリをロードする必要があるとします。このライブラリはロードに時間がかかるため、一度だけロードする必要があります。これに対する 2 つの自然な解決策は、シングルトン パターンまたはモノステート パターンを使用することです。Ruby のこの特定のコンテキストで、これらのソリューションのいずれかに利点はありますか?

例えば:

# Using a Singleton class
require 'singleton'

class Parser
  include Singleton

    def initialize
      @parser = load_external_library
    end

    def parse(sentence)
      @parser.parse(sentence)
    end
end

# Then calling using...
Parser.instance.parse(sentence)

対:

# Using a Monostate class

class Parser
    def self.parse(sentence)
      @@parser ||= load_external_library
      @@parser.parse(sentence)
    end
end

# Then calling using...
Parser.parse(sentence)

2 番目の構文はより簡潔なので、Ruby でシングルトンを使用する利点はありますか?

4

1 に答える 1

4

シングルトン パターンは、できるという事実を構造的に強制しnever have more than one instance of a class at a time、シングルトンを扱っていることは開発者にとって明らかです。

モノステートは、behavior of a singleton without the structure of the monostate.

インスタンス データが必要な場合もあります。したがって、モノステートの方が優れています。インスタンスを作成し、メソッドを使用してインスタンス データに影響を与えながら、静的データにアクセスすることができます。シングルトンでは、インスタンス データを持つことはできません。

さらに、シングルトンからクラスを派生させることを計画していて、それらのクラスをシングルトンにしたい場合、より良い選択はモノステートです。これは、モノステートから派生したすべてのクラスがモノステートであるためです。シングルトン クラスから派生したクラスは、デフォルトではシングルトンではありません。各派生クラスに静的メソッドと属性を追加する必要があります。

于 2012-01-02T07:13:02.147 に答える