設計パターンは、ソフトウェア設計で発生する一般的な問題に対する実証済みの解決策です。これらの問題を柔軟かつ再利用可能な方法で解決するためのテンプレートまたはガイドが提供されます。
各パターンは、開発者が特定のコンテキストに適応できるベスト プラクティスを表しています。デザイン パターンは、多くの場合、3 つの主要なカテゴリに分類されます。
このシリーズのスタートとして、シングルトン パターンについて話しましょう。
シングルトン パターンは、クラスにインスタンスが 1 つだけあることを保証し、そのインスタンスへのグローバル アクセス ポイントを提供します。
これは、データベース接続や構成設定などの共有リソースを管理する必要がある場合に便利です。
構成を管理するときやハードウェア リソースと対話するときなど、クラスのインスタンスが 1 つだけ存在することを確認する必要があることがよくあります。シングルトンを使用しないと、複数のインスタンスを作成すると、データの不整合やリソースのロックなどの問題が発生する可能性があります。
これは、複数のゴルーチンがクラスの新しいインスタンスを作成したり、共有リソースにアクセスしたりできる非同期コードを操作するときによく発生します。
データベース接続プールを検討します。アプリケーションの複数の部分が同時に新しい接続を作成すると、データベースの相互作用が冗長になったり、競合したりする可能性があります。シングルトンは、アプリケーション全体で 1 つの接続のみが作成され使用されることを保証します。
package main import ( "fmt" "sync" ) type Singleton interface { DoSomething() string } type singleton struct{} var lock = &sync.Mutex{} var instance *singleton func NewSingletonInstance() *singleton { if instance == nil { lock.Lock() defer lock.Unlock() if instance == nil { fmt.Println("Creating single instance now.") instance = &singleton{} } else { fmt.Println("Single instance already created.") } } else { fmt.Println("Single instance already created.") } return instance } func (s *singleton) DoSomething() string { return "Doing something." } func main() { instance1 := NewSingletonInstance() instance2 := NewSingletonInstance() fmt.Printf("%p\n", instance1) fmt.Printf("%p\n", instance2) }
関数 NewSingletonInstance は、複数回呼び出された場合でも、シングルトンのインスタンスが 1 つだけ作成されるようにします。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3