2017-03-23 7 views
0

私はPHPでプログラムしますが、これは一般的なオブジェクト指向の質問です。オブジェクト内でのシングルトン使用または参照として渡される

オブジェクト内からシングルトンクラスを呼び出すことと、外部に呼び出して変数を渡すことについてはどう思いますか?

オプション1:

$instance = Singleton::getInstance(); 

$obj = new ClassName(); 
$obj->setSingleton($instance); 

はオプション2:

class ClassName 
{ 
    public function __construct(){ 
     $instance = Singleton::getInstance(); 
     $instance->doSomething(); 
    } 
} 

は単なる "使用ごとの" 決定(すなわち、シングルトンインターフェースを実装する、など)これはやルールがありますか?

私はVSシングルトンを渡すオブジェクトを見ることができますが、シングルトンインスタンスとコールは対話していますか?多くのクラスを持つ典型的なコードと、シングルトンインスタンスのための多くの用途を考えてみましょう...これには何らかの規則がありますか?

+0

私は一般的にSingletonsのファンではありませんが、オブジェクト内にインスタントを取得すると、そのオブジェクトはシングルトンと密接に結合します。それがコード内のあらゆるところで発生すると、問題が悪化します。しかしそれは、それを必要とするすべてのオブジェクトにインスタンスを渡すことと同様に悪いことかもしれません! – chatton

+0

@chattonいずれの方法にも欠点があるようですが、シングルトンは非常に一般的なデザインパターンです。私はこのケースでなぜ好奇心が強いのか分かります。 – user3168961

+0

@AlexGは、誰かがそれを読んでいる人にとってはあまり明らかではないコードに関して、彼の答えで@AlexGが良い点を作ったと思います。私が1つを選択する場合、メソッド内でgetInstance()を呼び出すのではなく、参照を渡すことになります。 – chatton

答えて

0

どちらも問題ありませんが、他の人があなたのコードを見ると、あなたのオプション#1でシングルトンを扱っていることはあまり明らかではないかもしれません。 IMHO関数を呼び出す必要があるときに関数の本体にシングルトンの参照を保持するのは完全に有効ですが、メンバ変数として保持しません。

メンバ変数を保持することは、明白な理由でオブジェクトが大きくなることを意味します。

関連する問題