Singleton Pattern


モノトーンモードについて


シングルトーンモードとは、作成したオブジェクトをアプリケーション内の任意の場所で参照できるように、特定のオブジェクトをメモリに一度割り当てるだけの設計モードです.
モノトーン配列は1つのインスタンスのみを作成します.これは、必要に応じて新しいインスタンスを作成してメモリを消費する必要がないことを意味します.
モノトーン配列は「作成」(Creation Pattern)です.
共有インスタンスの作成に関するモードだからです.
クラス図を見てみましょう.

モノクロはいつ使いますか?


クラスに複数のインスタンスがある場合は、問題が発生したり、論理に合致しない場合は、モノトーンモードを使用します.
また、「singletonplus」と呼ばれるパターンもよく使われています.
指定したインスタンスを作成できる場合は、このアレイを使用します.
代表的な例はFileManagerである.
FileManagerは、プロジェクト内の任意の場所からファイルにアクセスできます.これは既定のモノトーンです.また、自分で作成することもできます.

Example


典型的なモノトーンモード


Apple Frameworkで既にモノトーンが使用されている例を見てみましょう.
import UIKit

let app = UIApplication.shared
アプリケーションを実行する場合、UIアプリケーションには2つのインスタンスがありません.
UIアプリケーションが1つ生成され、サブウィンドウから各種アプリケーションを実行するために必要なオブジェクトが生成されるためです.
UIアプリケーションの2つのインスタンスは、2つのアプリケーションが実行されたことに等しい.
let secondApp = UIApplication()
UIアプリケーションインスタンスを作成すると、コンパイルエラーが発生します.
モノトーンなので、新しいインスタンスを作成できません.
こんな質問があるはず
どうやってインスタンスの生成を阻止しますか?
次はコードです.
public class Constant {
  // 1 인스턴스를 생성하고 정적변수로선언
  static let shared = Constant() 

	// 2 초기화 함수를 접근제한자로 선언
	private init() { }
}
このようにモノトーンの使用を定義します
注記で説明したように、共有するインスタンスを静的変数として指定することで、アプリケーションは任意の場所からインスタンスにアクセスできます.
さらに、個々のインスタンスの作成を制限するために、別のJBJルート限定子「private」も宣言しました.
使用方法は次のとおりです.
let constant = Constant.shared

モノトーンプラス記号


次はコードです.
let defaultFileManager = FileManager.default
let customFileManager = FilManager()
デフォルトでは、ファイルマネージャはキーワードdefaultを使用してインスタンスを共有します.
次に、次の行を見て、インスタンスを直接構成することもできます.
FileManagerのようにモノクロコールを構成して、共有インスタンスとデータムインスタンスを作成します.
public class singletonPlus {
	// 1
	static let shared = singletonPlus()

	// 2
	public init() { }
}
1番のコードを表示すると、既存の共有インスタンスと同じ共有インスタンスが作成され、静的変数として指定されます.
2番コードを見ると違いが感じられますか?

既存のモノトーンは、priavateアクセス制限子を使用してインスタンスの作成を阻止します.
それに比べて、単トンプラス号は公衆がどこでも近づくことができる.
これが違いです.

モノクロ調を使用する場合は、ご注意ください


モノクロパターンは非常に直感的で、実施しやすい.
easy to use
これでは悪用される可能性があります.
これにより、単一のトーンで問題を迅速に解決できます.
ex.コントローラ間でデータを転送...などなど.
  • 特定のデータはアプリケーションに全面的に適用され、宣言するたびに不便です.
  • のデータを1回書けば、前に読むことができます.(または、データの変更はほとんどありません.)
  • 上記の場合、通常は役に立ちます.
    しかし、単一色調の複雑な論理を用いると、
    これは,オブジェクト向けの設計原則(オープン‐クローズ)とは逆である.
    タスク実行時にモノトーンデータを変更した場合、Side効果が発生する可能性があります.

    整理する


    Q.モノトーンモードとは?
    Q.モノクロはいつ使えばいいですか?
    Q.モノトーンモードの実現方法
    以上の質問の答え.
    読んでくれてありがとう.

    参考資料

  • https://gmlwjd9405.github.io/2018/07/06/singleton-pattern.html
  • https://jeong-pro.tistory.com/86
  • Javaがモノトーンモードを使う理由と注意事項|MHLab Blog