ファクトリーパターン(3)
定義: オブジェクトを作成するためのインターフェイスを定義し、どのクラスをインスタンス化するかをサブクラスに決定させます。ファクトリ メソッドは、クラスのインスタンス化をそのサブクラスに延期します。
- 抽象製品クラス
- 特定の製品カテゴリー
- 抽象ファクトリークラス
1.抽象ファクトリークラス
public abstract class Computerfactorys {
public abstract <T extends Computer> T createComputer(Class<T> clz);
}
2.特定のファクトリ クラス
public class GDComputerfactory extends Computerfactorys {
@Override
public <T extends Computer> T createComputer(Class<T> clz) {
Computer computer = null;
String classname = clz.getName();
try {
//通过反射来生产不同厂家的电脑
computer = (Computer) Class.forName(classname).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return (T) computer;
}
}
3.抽象プロダクトクラスと具体プロダクトクラス
この 2 つのクラスは、単純なファクトリ パターンと同じです。
4.使いやすい
public class Client {
public static void main(String[] args) {
Computerfactorys computerfactory = new GDComputerfactory();
LenovoComputer lenovoComputer = computerfactory.createComputer(LenovoComputer.class);
lenovoComputer.start();
}
}
要約する
- シンプル ファクトリ モード: ファクトリ クラスには必要な論理判断が含まれており、さまざまな条件に従って関連クラスを動的にインスタンス化します。これにより、特定の製品への依存が解消されますが、同時に問題も発生します。新しい製品を追加する必要がある場合、クラスをインスタンス化するためにファクトリ クラスにケース判定を追加する必要があり、オープンとクローズに違反します。原則は変更することもできます。ファクトリ パターンはこの原則に違反しません。ファクトリ クラスを変更する必要はなく、プロダクトを直接作成するだけです。