タグ付けされた質問 「singleton」

特定のクラスのアプリケーション全体のインスタンスが1つだけ存在することを保証する設計パターン。ギャングオブフォーの創造的なデザインパターンの1つ。

16
GOFシングルトンパターンの実行可能な代替案はありますか?
それに直面しよう。Singletonパターンは、非常に論争の大群プログラマーとトピックの両方フェンスの脇。シングルトンは栄光のグローバル変数に過ぎないと感じている人や、パターンで誓い、それを絶え間なく使用している人もいます。ただし、シングルトン論争が私の質問の中心にあるのは望ましくありません。 誰もが綱引きを持って戦い、私が気にかけているすべてのことで誰が勝つかを確認できます。私が言おうとしているのは、正解が1つあるとは思わないことであり、意図的に炎上党派の口論をしようとしているのではありません。私が質問するとき、私は単にシングルトンの選択肢に興味があります: GOFシングルトンパターンに代わるものはありますか? たとえば、過去にシングルトンパターンを何度も使用したことがあるのですが、1つまたは複数の変数の状態/値を保存することに単に関心があります。ただし、変数の状態/値は、シングルトンパターンを使用する代わりに、静的変数を使用してクラスの各インスタンス化間で保持できます。 他にどんなアイデアがありますか? 編集: 「シングルトンを正しく使用する方法」に関する別の投稿にしたくありません。繰り返しますが、それを回避する方法を探しています。楽しいですか?私はあなたの映画の予告編の声で純粋に学術的な質問をしていると思います。「シングルトンが存在しないパラレルユニバースでは、何ができるでしょうか?」

8
AngularJSの非シングルトンサービス
AngularJSのドキュメントには、サービスはシングルトンであると明記されています。 AngularJS services are singletons 直観に反して、module.factoryシングルトンインスタンスも返します。 シングルトン以外のサービスには多くのユースケースがあることを考えると、Serviceのインスタンスを返すファクトリメソッドを実装して、ExampleService依存関係が宣言されるたびに、異なるインスタンスによって満たされるようにするための最良の方法は何ExampleServiceですか?

11
Springコンテナーでのシングルトン設計パターンとシングルトンBean
SpringコンテナにはデフォルトでシングルトンとしてBeanがあり、Springフレームワークに基づくWebアプリケーションがある場合、Springを通じてBeanを作成するだけでなく、グローバルデータを保持するシングルトンデザインパターンを実装する必要があります。 。 私が実際に尋ねようとしていたことを説明できない場合は、ご容赦ください。

4
Swift 3のプロパティを持つシングルトン
AppleのCocoaおよびObjective-CでのSwiftの使用(Swift 3用に更新)ドキュメントでは、シングルトンパターンの次の例が示されています。 class Singleton { static let sharedInstance: Singleton = { let instance = Singleton() // setup code return instance }() } このシングルトンが文字列の可変配列を管理する必要があると想像してみましょう。どのように/どこでそのプロパティを宣言し、それが空の[String]配列に適切に初期化されるようにしますか?
88 singleton  swift3 

4
Javaで列挙型をシングルトンとして使用するための最良のアプローチは何ですか?
SOの質問で書かれたものに基づいてJavaでのベストシングルトン実装-つまり、列挙型を使用してシングルトンを作成することについて-の違い/長所/短所は何ですか(コンストラクターは省略) public enum Elvis { INSTANCE; private int age; public int getAge() { return age; } } そして電話 Elvis.INSTANCE.getAge() そして public enum Elvis { INSTANCE; private int age; public static int getAge() { return INSTANCE.age; } } そして電話 Elvis.getAge()
85 java  singleton 

5
Rubyのシングルトンクラスとは正確には何ですか?
Rubyのシングルトンクラスはそれ自体がクラスですか?すべてのオブジェクトが「クラス」に属する理由ですか?概念はあいまいですが、クラスメソッドを定義できる理由と関係があると思います(class foo; def foo.bar ...)。 Rubyのシングルトンクラスとは何ですか?
85 ruby  oop  singleton 

8
.NETのダブルチェックロックでの揮発性修飾子の必要性
複数のテキストによると、.NETでダブルチェックロックを実装する場合、ロックしているフィールドには揮発性修飾子を適用する必要があります。しかし、なぜ正確に?次の例を検討します。 public sealed class Singleton { private static volatile Singleton instance; private static object syncRoot = new Object(); private Singleton() {} public static Singleton Instance { get { if (instance == null) { lock (syncRoot) { if (instance == null) instance = new Singleton(); } } return instance; } } …
85 c#  singleton  volatile 

6
PythonのBorgパターンがSingletonパターンよりも優れているのはなぜですか
ボーグパターンがシングルトンパターンよりも優れているのはなぜですか? 私はそれらが何か違う結果をもたらすのを見ないので尋ねます。 ボーグ: class Borg: __shared_state = {} # init internal state variables here __register = {} def __init__(self): self.__dict__ = self.__shared_state if not self.__register: self._init_default_register() シングルトン: class Singleton: def __init__(self): # init internal state variables here self.__register = {} self._init_default_register() # singleton mechanics external to class, for example this …
82 python  singleton 

8
ロガーをシングルトンにするのは良い習慣ですか?
次のように、ロガーをコンストラクターに渡す習慣がありました。 public class OrderService : IOrderService { public OrderService(ILogger logger) { } } しかし、それは非常に面倒なので、私はしばらくの間、これをプロパティとして使用しました。 private ILogger logger = NullLogger.Instance; public ILogger Logger { get { return logger; } set { logger = value; } } これも面倒になります-乾いていないので、すべてのクラスでこれを繰り返す必要があります。基本クラスを使用することもできますが、Formクラスを使用しているので、FormBaseなどが必要になります。したがって、ILoggerを公開したシングルトンを使用することのデメリットは何でしょうか。 Infrastructure.Logger.Info("blabla"); 更新:マーリンが正しく気づいたように、最初と2番目の例ではDIを使用していることを言及する必要があります。

9
データベース接続のグローバルまたはシングルトン?
PHPのデータベース接続にグローバルではなくシングルトンを使用する利点は何ですか?グローバルの代わりにシングルトンを使用すると、コードが不必要に複雑になると思います。 グローバルなコード $conn = new PDO(...); function getSomething() { global $conn; . . . } シングルトンを使用したコード class DB_Instance { private static $db; public static function getDBO() { if (!self::$db) self::$db = new PDO(...); return self::$db; } } function getSomething() { $conn = DB_Instance::getDBO(); . . . } グローバルまたはシングルトン以外のデータベース接続を初期化するためのより良い方法がある場合は、それについて言及し、グローバルまたはシングルトンよりも優れている点を説明してください。


1
Springのスコーププロキシとは何ですか?
私たちが知っているように春には、(機能を追加するためにプロキシを使用する@Transactionalと、@Scheduledたとえば)。2つのオプションがあります-JDK動的プロキシを使用する(クラスは空でないインターフェースを実装する必要があります)、またはCGLIBコードジェネレーターを使用して子クラスを生成します。proxyModeを使用すると、JDK動的プロキシとCGLIBのどちらかを選択できるといつも思っていました。 しかし、私の想定が間違っていることを示す例を作成することができました。 ケース1: シングルトン: @Service public class MyBeanA { @Autowired private MyBeanB myBeanB; public void foo() { System.out.println(myBeanB.getCounter()); } public MyBeanB getMyBeanB() { return myBeanB; } } プロトタイプ: @Service @Scope(value = "prototype") public class MyBeanB { private static final AtomicLong COUNTER = new AtomicLong(0); private Long index; public MyBeanB() { …

2
Java-ユニットテスト中にリソースファイルパスをテストファイルにスワップする方法
いくつかの設定を持つリソースファイルがあります。このファイルから設定をロードするResourceLoaderクラスがあります。このクラスは現在、熱心にインスタンス化されたシングルトンクラスです。このクラスがロードされるとすぐに、ファイル(別のクラスの定数フィールドとして保存されているファイルパス)から設定を読み取ります。これらの設定の一部は、単体テストには適していません。たとえば、このファイルにはスレッドのスリープ時間があり、これは製品コードでは数時間になる場合がありますが、単体テストでは数ミリ秒にしたいと考えています。そのため、値のセットが異なる別のテストリソースファイルがあります。私の質問は、単体テスト中にメインのリソースファイルをこのテストファイルと交換するにはどうすればよいですか?プロジェクトはMavenプロジェクトであり、テストフレームワークとしてtestngを使用しています。これらは私のアプローチの一部です @BeforeSuiteを使用してFilePath定数変数を変更し、テストファイルを指すようにし、@ AfterSuiteを使用して元のファイルを指すようにします。これは機能しているようですが、ResourceLoaderクラスは熱心にインスタンス化されているため、ResourceLoaderクラスがロードされる前に@BeforeSuiteメソッドが常に実行される保証はなく、ファイルパスが変更される前に古いプロパティがロードされる可能性があります。ほとんどのコンパイラーは、必要な場合にのみクラスをロードしますが、これがJava仕様の要件であるかどうかはわかりません。したがって、理論的には、これはすべてのJavaコンパイラで機能するとは限りません。 リソースファイルのパスをコマンドライン引数として渡します。pomのsurefire構成でコマンドライン引数としてテストリソースファイルパスを追加できます。これは少し過剰に見えます。 1.のアプローチを使用して、ResourceLoaderを遅延インスタンス化します。これにより、ResourceLoader.getInstance()。getProperty(..)への最初の呼び出しの前に@BeforeMethodが呼び出された場合、ResourceLoaderが正しいファイルをロードすることが保証されます。これは最初の2つのアプローチよりも優れているようですが、シングルトンクラスを遅延インスタンス化すると、列挙型などの単純なパターンを使用できないため、醜くなります(熱心なインスタンス化の場合のように)。 これは一般的なシナリオのようですが、最も一般的な方法は何ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.