ホームページ > ウェブフロントエンド > jsチュートリアル > js デザイン パターン - シングルトン パターンの使用

js デザイン パターン - シングルトン パターンの使用

php中世界最好的语言
リリース: 2018-03-14 14:02:33
オリジナル
2404 人が閲覧しました

今回は、jsデザインパターン-シングルケースモードと、jsシングルトンモードを使用する際の注意点を紹介します。以下は実際的なケースです。見てみましょう。

1. 概念:

従来の開発エンジニアの観点から見ると、単一関心モデルは、各クラスがインスタンスを 1 つだけ持つことを保証するものであり、インスタンスが存在するかどうかを最初に確認します。存在しない場合は、再度作成されます。これにより、各クラスにインスタンス オブジェクトが 1 つだけ存在することが保証されます。 JavaScript では、シングルトンは
名前空間 のプロバイダーとして機能し、オブジェクトにグローバルにアクセスするための一意のアクセス ポイントを提供します。 123 2. 機能と注意事項:
機能: 1. モジュール間の通信
2. 特定のクラスのオブジェクトはシステム内に 1 つだけ存在できます
3. 独自の
属性とメソッドを保護します 注意事項: 1. 以下に注意してくださいthis の使用
2. クロージャは簡単にメモリ リークを引き起こす可能性があります
3. 継承を使用する場合は new の使用に注意してください。

3.

を実装する最も簡単な方法は、多数のプロパティとメソッドを含めることができるオブジェクト リテラルを使用することです。

var firstObject = {
    property1: "something",
    property2: "something else",
    method1: function () {
        console.log('hello web!');
    }
};
ログイン後にコピー

このオブジェクトを拡張したい場合は、独自のプライベート メンバーを提供し、これらの変数と関数の宣言をクロージャーを介して内部にカプセル化します。プライベートまたはパブリック メソッドを実装できます。もう一度次のコードを見てみましょう:

var firstObject= function () {
    /* 这里声明私有变量和方法 */
    var privateVariable = 'something private';    function showPrivate() {
        console.log(privateVariable);
    }    /* 公有变量和方法(可以访问私有变量和方法) */
    return {
        publicMethod: function () {
            showPrivate();
        },
        publicVar: 'the public can see this!'
    };
};var single = firstObject();
single.publicMethod();  // 输出 'something private'console.log(single.publicVar); // 输出 'the public can see this!'
ログイン後にコピー

使用するときだけ初期化したい場合、どうすればよいでしょうか?リソースを節約するために、次のように、これらのコードを別の

コンストラクター で初期化できます:

var firstjObiect= (function () {
    var instantiated;    function init() {
        /*这里定义单例代码*/
        return {
            publicMethod: function () {
                console.log('hello world');
            },
            publicProperty: 'test'
        };
    }    return {
        getInstance: function () {
            if (!instantiated) {
                instantiated = init();
            }            return instantiated;
        }
    };
})();/*调用公有的方法来获取实例:*/firstjObiect.getInstance().publicMethod();
ログイン後にコピー

その使用シナリオを見てみましょう

var firstObjectTester = (function () {
    //参数:传递给单例的一个参数集合
    function Singleton(args) {
        //设置args变量为接收的参数或者为空(如果没有提供的话)
        var args = args || {};        //设置name参数
        this.name = 'SingletonTester';        //设置pointX的值
        this.pointX = args.pointX || 6; //从接收的参数里获取,或者设置为默认值
        //设置pointY的值
        this.pointY = args.pointY || 10;
    }    //实例容器
    var instance;    var _static = {
        name: 'SingletonTester',        //获取实例的方法
        //返回Singleton的实例
        getInstance: function (args) {
            if (instance === undefined) {
                instance = new Singleton(args);
            }            return instance;
        }
    };    return _static;
})();var singletonTest = firstObjectTester .getInstance({ pointX: 5 });
console.log(singletonTest.pointX); // 输出 5
ログイン後にコピー

: 以下は、システム間のさまざまなモードでの通信調整に使用されます。シングルトン モードの実装例へのリンクは次のとおりです:

Textarea データ保存中の Html から Txt への変換と表示中の Txt から HTML への変換の解決策

上記のメソッドの主な実装方法は次のとおりです。は他の実装方法です (Uncle Tom のブログより)

方法 1、

function Universe() {
    // 判断是否存在实例
    if (typeof Universe.instance === 'object') {        return Universe.instance;
    }    // 其它内容
    this.start_time = 0;    this.bang = "Big";    // 缓存
    Universe.instance = this;    // 隐式返回this}// 测试var uni = new Universe();var uni2 = new Universe();
console.log(uni === uni2); // true
ログイン後にコピー

方法 2、

function Universe() {
    // 缓存的实例
    var instance = this;    // 其它内容
    this.start_time = 0;    this.bang = "Big";    // 重写构造函数
    Universe = function () {
        return instance;
    };
}// 测试var uni = new Universe();var uni2 = new Universe();
uni.bang = "123";
console.log(uni === uni2); // trueconsole.log(uni2.bang); // 123
ログイン後にコピー

この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、他の関連記事に注目してください。 PHP中国語ウェブサイトで!

推奨書籍:

JavaScriptの詳細なDOMアプリケーション

詳細なJavaScriptタイマー

JavaScriptの詳細な基本アプリケーション

以上がjs デザイン パターン - シングルトン パターンの使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート