Singleton Patternとは?


Singleton Patternとは?


アップルの公式文書には、次のものが含まれています.
A singleton class returns the same instance no matter how many times an application requests it. A typical class permits callers to create as many instances of the class as they want, whereas with a singleton class, there can be only one instance of the class per process. A singleton object provides a global point of access to the resources of its class. Singletons are used in situations where this single point of control is desirable, such as with classes that offer some general service or resource.
ソース:https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/Singleton.html
説明します
「単一トンクラス」は、同じインスタンスを返します.アプリケーションがどれだけのリクエストを発行しても、同じインスタンスが返されます.
一般クラスでは、呼び出し元が必要に応じてクラスのインスタンスを作成できますが、単色クラスの場合、各プロセスにはクラスのインスタンスが1つしかありません.
シングルトーンオブジェクトは、クラスリソースのグローバルアクセスポイントを提供します.
△上記の言葉を正しく理解することはできないが、感覚的にはグローバルにアクセスできることを意味しているようだ.
モノトーンオブジェクトは、通常、1つのオブジェクトを作成するだけのサービスまたはリソースに使用されます.

これは上の説明と画像ですが、きれいな色の矢印が見えますか?
この二つのきれいな部分は一つはAで、もう一つはBです.
一般的なレベルでは、上記の要求と応答を得た結果は異なります.(上はA、下はB)
でもモノトーンだと両方A
Q.画像や説明があいまいで、いつ使うかは事例で知ったほうがいいです.
A.事例で知ったほうがいい.そうすれば実際に使いたい時に使えることを覚えられるのではないでしょうか.
状況を仮定します.一般的にアプリを作成するとログイン機能が実現しますログイン後、APIに対してPOSTを行います.これは、通常、「jwtToken」(以下、タグと略す)という応答である.
このコインを持ってアプリケーションで何かをするときは、ずっとそれが必要です.
たとえば、
ビデオアプリケーションの場合は、ビデオを再生するときに、APIにトークン値を持つリクエストを発行する必要があります.
リリース版アプリであれば、掲示板に文章を書いたりコメントを書いたりするときに必要です.
このような「グローバル性」が必要です.かなり一般的にサービスを利用しています(本書の表記)
このトークンがこのクラスのUI上のDepthが深い場所にある場合、クラスにデータを渡すたびにコントローラ間でコミュニケーションをとる必要があるのではないでしょうか.Initメソッドに渡すか、サブスクリプトとしてアクセスするか、delegateに渡すかなどです.
何でも、何でも解決できる.ただ効率的ではありません.単色のパターンを使うのは簡単です.
トークン自体をアプリケーションのすべての場所に近い深さに置けばいいです.そこはグローバル変数の位置になります.△グローバルという意味自体が地域全体ですから.すべての場所にアクセスできます.
Q.うん…グローバルに使用する情報や機能をモノトーンで実現できればいいという意味です.では具体的にはどのように書かれているのでしょうか.
A.はい、次のコードを見てみます.
class UserInfo {

  static let shared = Singleton()

	var jwtToken: String?

	// init 메소드를 호출해 인스턴스가 중복 생성되는 것을 막기 위해
	// private 접근제어자를 사용합니다.
  private init() {}
}
このように定義されているのは「国のルール」です(もちろん、制作の際にはカスタマイズを行います.)
このように定義すれば、今から使うのではないでしょうか.
let token = UserInfo.shared.jwtToken
サブスクリプトから各値にアクセスして取得できます.

Singleton Patternの長所と短所


それらの長所と短所を理解して、いつ使用するか、いつ使用しないかを決定します.(私はそうだった)
理解度の高い方なら、このブログの記事をお勧めします!
https://develogs.tistory.com/8
かなりの構造的な観点と多くの考慮事項を考慮した良い文章で、お勧めします!
  • の利点
  • 1. 인스턴스를 2 번 생성하지 않음 -> 메모리 절약
    2. 싱글톤으로 데이터 전달 및 공유가 쉬움 
  • 欠点
  • 1. 객체지향설계원칙인 "개방=패쇄" 원칙을 위배할 가능성이 있음. (아래 추가설명)
    (인스턴스 간의 결합도가 높아짐으로 인한 발생)
    2. 수정과 테스트에 어려움을 초래함.
    ※開放閉鎖原則:開放閉鎖原則
    OCPとは、ソフトウェアのコンポーネント(ex.コンポーネント、クラス、モジュール、関数)が「拡張に対してオープン」である必要があることを意味します.一方、「変更を閉じる」必要があります.
    拡張に開放?あ、これは何かを追加するのが便利だという意味です.
    閉じるだけ?あ.これは、追加しても他の部分は変更すべきではないことを意味します.
    それ以外に、いくつかの長所と短所がありますが、私はもっと勉強して追加します.

    整理する


    整理すると、
    グローバル範囲の単純なデータ共有が必要な場合は、それを使用します.複雑になったら、他の方法を考えることをお勧めします.これは,依存性とインスタンス間の結合性が多くの側面効果を増大させるためである.

    参考資料


    https://ttuk-ttak.tistory.com/75
    https://babbab2.tistory.com/66
    https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/Singleton.html
    https://dublin-java.tistory.com/48