私たちは今、誰が、例えば、BJCheessPizza、BJPepoperPizza、LDChessPizzaこの時点で他の種は、我々は()メソッドは抽象型としてOrderPizzaクラスcreatePizzaを定義していることができ、それが地域の特性に応じた順序にピザを注文、である、機能を追加したいですこの方法を実装するために呼び出すと、の種類に対応する機能を実装するために
表現すると、以下のクラス図です。
参照を理解していない場合はもちろん、これは、改革の章に基づいています。
- すみません!シンプルな工場パターン(staticファクトリ) -モデルを設計することは非常に牛である
学習がコア原則があるときの言葉を理解したり、UMLのクラス図について学ぶいない場合、私はあなたに非常に参考になると信じて、私たちは主に例で。コードで実装してみましょう: - ピザ(ピザクラスは抽象として定義され、抽象メソッド(PREPAREがあります))
public abstract class Pizza {
private String name;
public abstract void prepare();
public void bake() {
System.out.println("baking;");
}
public void cut() {
System.out.println("cuting;");
}
public void box() {
System.out.println("boxing;");
}
public void setName(String name) {
this.name = name;
}
}
- BJChessPizza
public class BJChessPizza extends Pizza{
@Override
public void prepare() {
setName("北京奶酪披萨");
System.out.println("北京奶酪披萨BjChessPizza 准备原材料");
}
}
- BJPepperPizza
public class BJPepperPizza extends Pizza{
@Override
public void prepare() {
setName("BJPepperPizza");
System.out.println("BJPepperPizza 准备原材料");
}
}
- LDChessPizza
public class LDChessPizza extends Pizza{
@Override
public void prepare() {
setName("伦敦奶酪披萨");
System.out.println("LDChessPizza 准备原材料");
}
}
- LDPepperPizza
public class LDPepperPizza extends Pizza{
@Override
public void prepare() {
setName("LDPepperPizza");
System.out.println("LDPepperPizza 准备原材料");
}
}
- BJOrderPizza
public class BJOrderPizza extends OrderPizza2{
@Override
Pizza createPizza(String orderType) {
Pizza pizza = null;
if (orderType.equals("chess")){
pizza = new BJChessPizza();
}else if (orderType.equals("pepper")){
pizza = new BJPepperPizza();
}
return pizza;
}
}
- LDOrderPizza
public class LDOrderPizza extends OrderPizza2{
@Override
Pizza createPizza(String orderType) {
Pizza pizza = null;
if (orderType.equals("cheese")){
pizza = new LDChessPizza();
}else if (orderType.equals("pepper")){
pizza = new LDPepperPizza();
}
return pizza;
}
}
- OrderPizza2(このクラスは、それがどのが、入力の種類に応じて、対処するOrderPizzaを指定しますが、呼び出しに責任があるのサブクラスであり、特定の新しいターゲットを扱っていません)
public abstract class OrderPizza2 {
//定义一个抽象方法,createPizza,让各个工厂子类自己实现
abstract Pizza createPizza(String orderType);
Pizza pizza;
public OrderPizza2() {
String orderType;
do {
orderType = getype();
pizza = createPizza(orderType);//抽象方法,由工厂子类来完成
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
} while (true);
}
//写一个方法,可以获取客户端希望订购的披萨种类
private String getype(){
try {
BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
System.out.println("input Pizza type:");
String str = strin.readLine();
return str;
}catch (IOException e){
e.printStackTrace();
return "";
}
}
}
- PizzaStore
public class PizzaStore {
public static void main(String[] args) {
new BJOrderPizza();
}
}
- 業績
概要:あなたはメソッドパターンはタイプに応じている工場を作成すると、各タイプは、そのサブクラスに、具体的な実装を生成するために、独自の工場に引き渡され、その後、クラスを使用することにより、着信の種類として作成します完全に、あなたも記述するために、「工場の工場」を使用することができます!