シンプルな工場
意味:
オブジェクトを作成するクラスが定義され、このクラスはオブジェクトのインスタンス化の動作をカプセル化します。
次のコードで説明します
コード
どのようなピザ(Pizza)であっても、材料の準備、焼き方、カット、包装の各工程を経る必要があり、
それらの動作を抽象的な手法として個別に抽出します。
さまざまな種類のピザにはそれぞれ独自の特徴がありますが、それらはすべてピザです
/**
Pizza 对象
* @author Myli
* @create 2023-03-08 15:03
*/
public abstract class Pizza {
//公共的业务方法
//准备材料
public void prepare(){
System.out.println("prepare");
};
//烤
public void bake(){
System.out.println("bake");
};
//切
public void cut(){
System.out.println("cut");
};
//打包
public void box(){
System.out.println("box");
};
}
/**具体抽象产品类 胡椒披萨 必须有一些自己的东西比如胡椒准备*/
public class PepperPizza extends Pizza{
//实现业务方法
}
/**具体抽象产品类 希腊比萨 必须有一些自己的东西比如…准备*/
public class GreekPizza extends Pizza{
//实现业务方法
}
/** 具体抽象产品类 奶酪披萨 必须有一些自己的东西比如奶酪准备 */
public class CheesePizza extends Pizza {
//实现业务方法
}
//工厂类 进行代加工
public class SimplePizzaFactory {
public Pizza CreatePizza(String ordertype) {
Pizza pizza = null;//
if (ordertype.equals("cheese")) {
pizza = new CheesePizza();
} else if (ordertype.equals("greek")) {
pizza = new GreekPizza();
} else if (ordertype.equals("pepper")) {
pizza = new PepperPizza();
}
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
}
私たちがこのペッパーピザを作ったとき、彼の仕事はすべて(準備、焼く、切る、彼独自のものの梱包など)完了しました。
//具体使用,或者在其他地方用这个东西
public class SimpleFactoryTest {
public static void main(String[] args) {
SimplePizzaFactory simplePizzaFactory = new SimplePizzaFactory();
//当我们创建这个pepperPizza时,他的自己的独有的和披萨和共有的工作就已经做好了
Pizza pepper= simplePizzaFactory.CreatePizza("pepper");
}
}
欠点:
クラスの作成はファクトリクラスに依存するため、プログラムを拡張したい場合はファクトリクラスを変更する必要があり、オープンとクローズの原則に違反するため、設計の観点からは一定の問題があります。 、どうやって解決しますか?(記事の例を挙げると、ピザを作成するには SimplePizzaFactory を経由する必要があります。マンゴー ピザなどの新しいタイプのピザを作成したい場合は、ピザを継承するマンゴー ピザ クラスを作成するだけでなく、ただし、SimplePizzaFactory も変更する必要があります。それを作成して elseif に追加します)
結論は:
オブジェクトを作成するための抽象メソッドを定義し、その抽象メソッドを実装するための複数の異なるファクトリ クラスを作成できるため、新しい関数を追加する必要がある場合は、以前のコードを変更せずに新しいファクトリ クラスを直接追加できます。
このメソッドは、次に説明するファクトリー メソッド パターンです。