目次
1. 単純な実装" >1. 単純な実装
2. スレッドの安全性" >2. スレッドの安全性
4. 静的初期化" >4. 静的初期化
ホームページ バックエンド開発 C#.Net チュートリアル シングルトンパターンと一般的な書き方の分析(デザインパターン01)

シングルトンパターンと一般的な書き方の分析(デザインパターン01)

Feb 13, 2017 am 11:39 AM

クラスにインスタンスが 1 つだけあることを確認し、インスタンスへのグローバル アクセス ポイントを提供します。

——「デザインパターン」

シングルトンパターンの概念は非常に単純で、例として C# 言語を使用して、一般的なシングルトン記述方法の長所と短所をリストします。

1. 単純な実装

 public sealed class Singleton
    {
        static Singleton instance = null;

        public void Show()
        {
            Console.WriteLine(  "instance function");
        }
        private Singleton()
        {
        }

        public static Singleton Instance
        {
            get
            {
                if (instance == null)
                {
                    instance = new Singleton();
                }
                return instance;
            }
        }
    }
ログイン後にコピー

コメント:


スレッドにとって安全ではありません
要件はシングルスレッドで満たされます
利点:
インスタンスはインスタンス内にあるため、プロパティ クラスが追加機能を使用できるようにメソッド内で内部的に作成されます
オブジェクトがインスタンスを必要とするまでインスタンス化は実行されません。このアプローチは「遅延インスタンス化」と呼ばれます。遅延インスタンス化により、アプリケーションの起動時にシングルトンの不必要なインスタンス化が回避されます。


2. スレッドの安全性

public sealed class Singleton
    {
        static Singleton instance = null;
        private static readonly object padlock = new object();

        private Singleton()
        {
        }

        public static Singleton Instance
        {
            get
            {
                lock (padlock)
                {
                    if (instance == null)
                    {
                        instance = new Singleton();
                    }
                }

                return instance;
            }
        }
    }
ログイン後にコピー



コメント:

同じのみ1 つのスレッドはプログラムのロックされている部分に入ることができます
オブジェクトインスタンスは最初に入ったスレッドによって作成されます
後のスレッドは入ったときにオブジェクトインスタンスを再度作成しません (instance == null) +
スレッドは毎回ロックされません
インスタンスは許可されます 初期化オブジェクトが最初にアクセスされるまで遅延されます


4. 静的初期化

 public sealed class Singleton
    {
        static Singleton instance = null;
        private static readonly object padlock = new object();

        private Singleton()
        {
        }

        public static Singleton Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (padlock)
                    {
                        if (instance == null)
                        {
                            instance = new Singleton();
                        }
                    }
                }
                return instance;
            }
        }
    }
ログイン後にコピー

コメント:


共通言語ランタイム上の DS ハンドル変数の初期化
パブリック静的プロパティは、インスタンスにアクセスするためのグローバル アクセス ポイントを提供します
インスタンス化メカニズム (.NET によって実装される) に対する制御が少なくなります

静的初期化は、.NET でシングルトンを実装するための推奨される方法です

ちょっとしたメモ:

静的コンストラクターにはアクセス修飾子がありません。C# は自動的にプライベートとしてマークする必要がある理由は、開発者がそれを呼び出すことを防ぐためであり、その呼び出しは常に です。 CLR の責任。 5 、遅延初期化

 public sealed class Singleton
    {
        private static readonly Singleton instance = null;
        static Singleton()
        {
            instance = new Singleton();
        }
        private Singleton()
        {
        }
        public static Singleton Instance
        {
            get
            {
                return instance;
            }
        }
    }
ログイン後にコピー

コメント:



初期化作業は Nested クラスの静的メンバーによって完了されるため、遅延初期化が実現されます。

クラスがインスタンス化されるとき、または静的メンバーが呼び出されるときに静的関数が呼び出されるため、

と .net フレームワークは静的コンストラクターを呼び出して静的メンバー変数を初期化します

したがって、4 番目のメソッドに従って記述した場合、Hello メソッドを呼び出すと、シングルトン インスタンスがインスタンス化されます。これは、私たちが望むものではありません。他に何か。

注:

1. Singleton パターンのインスタンス コンストラクターを protected に設定して、サブクラスの派生を許可できます。
2. シングルトン モードは、通常、ICloneable インターフェイスをサポートしません。これは、シングルトン モードの本来の目的に反して、複数のオブジェクト インスタンスが生成される可能性があるためです。
3. シングルトン モードは通常、シリアル化をサポートしません。これは、複数のオブジェクト インスタンスが発生する可能性もあり、これもシングルトン モードの本来の目的に反するからです。
4. Singletom モードでは、オブジェクトの作成の管理のみが考慮され、オブジェクトの破棄の管理は考慮されません。ガベージ コレクションとオブジェクトのオーバーヘッドをサポートするプラットフォームに関しては、通常、オブジェクトの破棄について特別な管理を行う必要はありません。


概要:

1. シングルトン パターンは、クラスの作成を改善するのではなく、制限します。
2. Singleton パターンの理解と拡張の核心は、「new を使用してクラスのコンストラクターに対するユーザーの任意の呼び出しを制御する方法」です。
3. シングルトンをいくつかのインスタンスを持つように簡単に変更できます。これは許可されており、意味があります。


上記は、単一ケースパターンと一般的な文章分析(デザインパターン01)の内容です。その他の関連コンテンツについては、PHP中国語Webサイト(www.php.cn)にご注意ください。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JavaScript のシングルトン パターンを理解するための 1 つの記事 JavaScript のシングルトン パターンを理解するための 1 つの記事 Apr 25, 2023 pm 07:53 PM

JS シングルトン パターンは、クラスのインスタンスが 1 つだけであることを保証する、一般的に使用される設計パターンです。このモードは主に、名前の競合や繰り返しの読み込みを避けるためにグローバル変数を管理するために使用され、メモリ使用量を削減し、コードの保守性とスケーラビリティを向上させることもできます。

C++ 関数のオーバーロードと書き換えにおけるシングルトン モードとファクトリ モードの適用 C++ 関数のオーバーロードと書き換えにおけるシングルトン モードとファクトリ モードの適用 Apr 19, 2024 pm 05:06 PM

シングルトン パターン: 関数のオーバーロードを通じて、シングルトン インスタンスにさまざまなパラメーターを提供します。ファクトリ パターン: 関数の書き換えを通じてさまざまなタイプのオブジェクトを作成し、作成プロセスを特定の製品クラスから切り離します。

PHP のシングルトン モードにおけるスレッド セーフティの問題についての考え PHP のシングルトン モードにおけるスレッド セーフティの問題についての考え Oct 15, 2023 am 10:14 AM

PHP におけるシングルトン モードのスレッド セーフティの問題について考える PHP プログラミングでは、シングルトン モードは一般的に使用されるデザイン パターンであり、クラスのインスタンスが 1 つだけであることを保証し、このインスタンスにアクセスするためのグローバル アクセス ポイントを提供します。ただし、マルチスレッド環境でシングルトン パターンを使用する場合は、スレッドの安全性の問題を考慮する必要があります。シングルトン パターンの最も基本的な実装には、プライベート コンストラクター、プライベート静的変数、およびパブリック静的メソッドが含まれます。具体的なコードは次のとおりです。

PHP 入門: シングルトン パターン PHP 入門: シングルトン パターン May 20, 2023 am 08:13 AM

ソフトウェア開発では、複数のオブジェクトが同じリソースにアクセスする必要がある状況によく遭遇します。リソースの競合を回避し、プログラムの効率を向上させるために、デザイン パターンを使用できます。中でも、シングルトン パターンはオブジェクトの作成によく使用される方法で、クラスのインスタンスが 1 つだけであることを保証し、グローバル アクセスを提供します。この記事では、PHP を使用してシングルトン パターンを実装する方法を紹介し、いくつかのベスト プラクティスの提案を提供します。 1. シングルトン モードとは何ですか? シングルトン モードは、オブジェクトを作成するためによく使用される方法で、その特徴は、クラスのインスタンスが 1 つだけであることを確認し、

PHP におけるシングルトン設計パターンの概念は何ですか? PHP におけるシングルトン設計パターンの概念は何ですか? Aug 18, 2023 pm 02:25 PM

シングルトン パターンでは、クラスにインスタンスが 1 つだけ存在することが保証され、グローバル アクセス ポイントが提供されます。これにより、アプリケーション内で使用できるオブジェクトが 1 つだけになり、制御されるようになります。シングルトン パターンは、クラスのオブジェクトをインスタンス化せずに、その一意のオブジェクトに直接アクセスする方法を提供します。例<?php classdatabase{ publicstatic$connection; privatefunc

PHP デザイン パターン: コード エクセレンスへの道 PHP デザイン パターン: コード エクセレンスへの道 Feb 21, 2024 pm 05:30 PM

はじめに PHP デザイン パターンは、ソフトウェア開発における一般的な課題に対する実証済みのソリューションのセットです。これらのパターンに従うことで、開発者はエレガントで堅牢かつ保守しやすいコードを作成できます。これらは、開発者が SOLID 原則 (単一責任、オープン/クローズ、リスコフ置換、インターフェイスの分離、依存関係の反転) に従うのに役立ち、それによってコードの可読性、保守性、拡張性が向上します。デザイン パターンの種類 さまざまなデザイン パターンがあり、それぞれに独自の目的と利点があります。最も一般的に使用される PHP 設計パターンの一部を次に示します。 シングルトン パターン: クラスにインスタンスが 1 つだけあることを保証し、このインスタンスにグローバルにアクセスする方法を提供します。ファクトリ パターン: 正確なクラスを指定せずにオブジェクトを作成します。これにより、開発者は条件付きで次のことを行うことができます。

PHPフレームワークにおけるシングルトンパターンの拡張とカスタマイズ PHPフレームワークにおけるシングルトンパターンの拡張とカスタマイズ Oct 15, 2023 am 11:10 AM

PHP フレームワークにおけるシングルトン モードの拡張とカスタマイズ [はじめに] シングルトン モードは一般的な設計パターンであり、クラスがアプリケーション全体で 1 回だけインスタンス化されることが保証されます。 PHP 開発では、特にフレームワークの開発と拡張において、シングルトン パターンが広く使用されています。この記事では、PHP フレームワークでシングルトン パターンを拡張およびカスタマイズする方法を紹介し、具体的なコード例を示します。 [シングルトン パターンとは] シングルトン パターンとは、クラスがオブジェクト インスタンスを 1 つだけ持つことができ、外部から使用するためのグローバル アクセス ポイントを提供することを意味します。 PHP 開発では、パス

PHP 分散システムにおけるシングルトン モードのアプリケーション シナリオとスレッド セーフティ プロセス PHP 分散システムにおけるシングルトン モードのアプリケーション シナリオとスレッド セーフティ プロセス Oct 15, 2023 pm 04:48 PM

PHP 分散システムにおけるシングルトン モードのアプリケーション シナリオとスレッド セーフティ プロセス はじめに: インターネットの急速な発展に伴い、分散システムは現代のソフトウェア開発においてホットなトピックとなっています。分散システムでは、スレッドの安全性は常に重要な問題です。 PHP 開発では、シングルトン パターンは一般的に使用される設計パターンであり、リソース共有とスレッド セーフの問題を効果的に解決できます。この記事では、PHP 分散システムにおけるシングルトン モードのアプリケーション シナリオとスレッド セーフティ プロセスに焦点を当て、具体的なコード例を示します。 1. シングルトンモード

See all articles