ファクトリメソッド
- 定義:作成したオブジェクトのインタフェースの定義が、中国インタフェースの実装クラスを決定するために聞かせてインスタンス化するどのクラス
- クラスをインスタンス化するファクトリメソッドは、サブクラスに延期許可しました。-これは、コアアイデアです
- タイプ:作成するタイプ
該当シーン
- オブジェクトを作成すると、反復コードの多くを必要と
- クライアントは、このクラスのインスタンスは、製品を作成し、その他の詳細を達成することであるかに依存しません
- クラス別のクラスは、オブジェクトが作成され、その子を開発します
原則
- Javaの多型とリヒターの置換原則
- プログラムが実行されている場合は、オブジェクトサブクラスのオブジェクトは、それが簡単にシステムを拡張すること、親クラスを上書きします。
利点
- ユーザーは、関係の必要性関係の詳細を作成していない対応する所望の生成物を植える必要があります
- 開閉、拡張性の原則と新製品ラインを追加します。
短所
- クラスの数は、あまりにも簡単で複雑になります
- システムの抽象化と理解の難しさを追加します。
そして、簡単な植物の違い
- 工場で作成されたシンプルなファクトリの実装オブジェクト
- ファクトリメソッド特定の作成プロセスを作成するファクトリメソッドでオブジェクトの親クラスを呼び出すには、サブクラスによって実装されます。
- シンプルな植物のジュニアパートナーは非常に明確で参照できない場合は、単純な工場-デザインパターン
役割
- 抽象ファクトリー
- 抽象ファクトリの実装
- 抽象オブジェクト
- コンクリートのオブジェクト
コーディング
-
私たちは、この基準に変更を加えるシンプル工場-デザインパターンを。
-
コンピュータの生産
public interface Computer {
/**
* 生产电脑
*/
void produce();
}
- 特定のコンピュータの達成
public class AppleComputer implements Computer {
public void produce() {
System.out.println("苹果电脑");
}
}
public class LenovoComputer implements Computer {
public void produce() {
System.out.println("联想电脑");
}
}
- コンピュータの生産工場
public abstract class ComputerFactory {
/**
* 获取电脑的抽象方法
* @return
*/
abstract Computer getComputer();
}
- コンピュータの工場の具体的な製造
public class AppleComputerFoctory extends ComputerFactory{
@Override
Computer getComputer() {
return new AppleComputer();
}
}
public class LenovoComputerFoctory extends ComputerFactory{
@Override
Computer getComputer() {
return new LenovoComputer();
}
}
- 使用
public class FactoryMethodTest {
public static void main(String[] args) {
//工厂方法
ComputerFactory computerFactory = new AppleComputerFoctory();
Computer computer = computerFactory.getComputer();
computer.produce();
ComputerFactory computerFactory1 = new LenovoComputerFoctory();
Computer computer1 = computerFactory1.getComputer();
computer1.produce();
}
}
- UML图
- 図から、私たちは、親クラスを作成するために、コンクリートを見達成するために、工場ではなく、個々の製品のファクトリクラスの実装にはありません。
- 私たちは、新しいDellコンピュータが必要な場合。私たちは、Dell製品、およびDellファクトリクラス缶を定義する必要があります
ソース
- ここで、他のデザインパターンの送信元アドレス、ああ!送信元アドレス
注意点
- ファクトリメソッドは、他の言葉では、製品の同じタイプの製品ファミリを使用しています。あなたがこの方法でサイド冷蔵庫を追加したい場合は、単に適用されますが、我々は次の抽象工場はありません。