[設計モード(作成モード)]-ファクトリモード
工場図案は設計図案の中で最も広く、最も基本的な図案である.
オブジェクトの作成の代わりにクラスを定義します.
ファクトリモードが分からない場合は、このような方法でコードを書くことが多い.(私も)
Testクラスに直接Aオブジェクトを作成すると依存関係が強化されます.
オブジェクトの作成は、オブジェクト間の結合関係を作成します.この結合関係は、オブジェクト間の依存性をもたらします.
(テストクラスはAクラスに依存)
Aクラスを変更した場合、または別のクラスに置き換えられた場合は、以前にAクラスを使用していた場所を修復する必要があります.
では、工場モードで上のコードを変更します.
つまり、Factoryクラスの役割は、オブジェクトの作成操作の代わりになります.
すると、上の最初のコードとは違って、オブジェクトの作成が個々のオブジェクトに渡されるため、テストクラスとAクラス間の依存関係は弱まります. Aクラスを変更したり、他のクラスに置き換えたりした場合は、Aクラスを使用する場所に触れることなくFactoryクラスを変更するだけです. しかし、このパターンには欠点があります.最初はTestクラスにAオブジェクトを1つ作成するだけで、今回はもう一度Factoryを通過する必要があります.(コールの増加->パフォーマンスの問題) でも上の長所を考えると... ^_^
オブジェクトの作成の代わりにクラスを定義します.
ファクトリモードが分からない場合は、このような方法でコードを書くことが多い.(私も)
class A
{
public function f()
{
return 1;
}
}
class Test
{
public $a;
public function someThing()
{
$this->a = new A;
print $this->a->f();
}
}
上のコードに何か問題がありますか?Testクラスに直接Aオブジェクトを作成すると依存関係が強化されます.
オブジェクトの作成は、オブジェクト間の結合関係を作成します.この結合関係は、オブジェクト間の依存性をもたらします.
(テストクラスはAクラスに依存)
Aクラスを変更した場合、または別のクラスに置き換えられた場合は、以前にAクラスを使用していた場所を修復する必要があります.
class A
{
public function f()
{
return 1;
}
}
class AFactory
{
public static function createInstance()
{
return new A;
}
}
class Test
{
public $a;
public function someThing()
{
$this->a = AFactory::createInstance();
print $this->a->f();
}
}
上のコードから見ると,Testクラスに直接オブジェクトを作成するのではなく,他のオブジェクト(Factory)にオブジェクト(A)を作成させる.(事前に作成したオブジェクトを受信して使用するテスト)つまり、Factoryクラスの役割は、オブジェクトの作成操作の代わりになります.
すると、上の最初のコードとは違って、
Reference
この問題について([設計モード(作成モード)]-ファクトリモード), 我々は、より多くの情報をここで見つけました https://velog.io/@aekiori/디자인패턴-생성패턴-팩토리-패턴テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol