定義
構造
例
今ピザ屋のオブジェクトがあり、3つのピザのオブジェクトがあります。PizzaA PizzaB PizzaCは、ピザピザのサブクラスでは、少しの食事法をショップです。
public class Pizza {
void prepare(){
System.out.println("preparing...");
}
void bake(){
System.out.println("baking...");
}
void cut(){
System.out.println("cutting...");
}
void box(){
System.out.println("boxing...");
}
}
public class PizzaA extends Pizza {
String name="A";
}
public class PizzaB extends Pizza{
String name="B";
}
public class PizzaC extends Pizza{
String name="C";
}
public class PizzaStore {
public static void main(String[] args) {
PizzaStore store = new PizzaStore();
Pizza pizza = store.orderPizza("A");
}
//点一个Pizza
public Pizza orderPizza(String type){
Pizza pizza = null;
if(type.equals("A"))
pizza = new PizzaA();
else if(type.equals("B"))
pizza = new PizzaB();
else if(type.equals("C"))
pizza = new PizzaC();
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return null;
}
}
ピザとPizzaStoreクラスは今、緊密に結合され、この方法に描画する新しい文を試してみてください、この方法は、単純な工場です。
package FactoryMethod;
public class PizzaStore {
public static void main(String[] args) {
PizzaStore store = new PizzaStore();
Pizza pizza = store.orderPizza("A");
}
public Pizza simpleFactory(String type){
Pizza pizza = null;
if(type.equals("A"))
pizza = new PizzaA();
else if(type.equals("B"))
pizza = new PizzaB();
else if(type.equals("C"))
pizza = new PizzaC();
return pizza;
}
//点一个Pizza
public Pizza orderPizza(String type){
Pizza pizza =simpleFactory(type);
System.out.println(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return null;
}
}
しかし、この方法は、このクラスにまだある、まだそこに結合され、ファクトリメソッドを達成するためのインタフェースを作成します。
作成した結合新しいオブジェクトが除去されています。
public class PizzaFactory extends FactoryMethod {
Object factoryMethod(String type) {
Pizza pizza = null;
if (type.equals("A"))
pizza = new PizzaA();
else if (type.equals("B"))
pizza = new PizzaB();
else if (type.equals("C"))
pizza = new PizzaC();
return pizza;
}
}
public class PizzaStore {
FactoryMethod factory;
public static void main(String[] args) {
PizzaStore store = new PizzaStore();
Pizza pizza = store.orderPizza("A");
}
public PizzaStore(FactoryMethod factory){
this.factory=factory;
}
//点一个Pizza
public Pizza orderPizza(String type){
Pizza pizza =(Pizza)factory.factoryMethod(type);
System.out.println(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return null;
}
}