工厂方法模式
定义了一个创建对象的抽象方法,由子类决定要实例化的类,
工厂方法模式将对象的实例化推迟到子类
继承抽象方法的类的构造器里创建实例对象,具体创建成什么样,直接体现在子类构造方法里
包1==================
Pizza:
package Allpizza;
public abstract class Pizza {
private String name;
public abstract void prepare();
public void bake() {
System.out.println(name+"正在baking!");
}
public void cut() {
System.out.println(name+"正在cutting!");
}
public void box() {
System.out.println(name+"正在boxing!");
}
public void setName(String name) {
this.name=name;
}
}
LDPeperPizza
package Allpizza;
public class LDPeperPizza extends Pizza {
@Override
public void prepare() {
// TODO Auto-generated method stub
System.out.println("伦敦胡椒披萨正在准备!!");
setName("伦敦胡椒披萨");
}
}
LDCheesePizza
package Allpizza;
public class LDCheesePizza extends Pizza{
@Override
public void prepare() {
// TODO Auto-generated method stub
System.out.println("奶酪披萨正在准备!!");
setName("伦敦奶酪披萨");
}
}
BJPeperPizza
package Allpizza;
public class BJPeperPizza extends Pizza {
@Override
public void prepare() {
// TODO Auto-generated method stub
System.out.println("北京胡椒披萨正在准备!!!");
setName("北京胡椒披萨");
}
}
BJCheesePizza
package Allpizza;
public class BJCheesePizza extends Pizza {
@Override
public void prepare() {
System.out.println("北京奶酪披萨正在准备!!!!");
setName("北京奶酪奶酪披萨");
}
}
包2==================
absOrder
package Orderpizza;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import Allpizza.Pizza;
public abstract class absOrder {
abstract Pizza CreatePizza(String orderType);
public absOrder() {
Pizza pizza=null;
String orderType="";
try{
do {
orderType=<u>getType</u>();
pizza=CreatePizza(orderType);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
}while(true);
}catch (Exception e){
System.err.println("没有此类披萨");
}
}
private String getType() {
try {
BufferedReader strin=new BufferedReader(new
InputStreamReader(System.in));
System.out.println("请输入需要的披萨种类:");
String str=strin.readLine();
return str;
}catch(IOException e){
e.getStackTrace();
return "";
}
}
}
BJorder
package Orderpizza;
import Allpizza.BJCheesePizza;
import Allpizza.BJPeperPizza;
import <u>Allpizza.LDCheesePizza</u>;
import <u>Allpizza.LDPeperPizza</u>;
import Allpizza.Pizza;
public class BJorder extends absOrder{
@Override
Pizza CreatePizza(String orderType) {
Pizza pizza=null;
if(orderType.equals("cheese")) {
pizza=new BJCheesePizza();
} else if(orderType.equals("peper")) {
pizza=new BJPeperPizza();
}
return pizza;
}
}
LDorder
package Orderpizza;
import Allpizza.LDCheesePizza;
import Allpizza.LDPeperPizza;
import Allpizza.Pizza;
public class LDorder extends absOrder {
@Override
Pizza CreatePizza(String orderType) {
Pizza pizza=null;
if(orderType.equals("cheese")) {
pizza=new LDCheesePizza();
} else if(orderType.equals("peper")) {
pizza=new LDPeperPizza();
}
return pizza;
}
}
Store
package Orderpizza;
public class Store {
public static void main(String[] args) {
// TODO Auto-generated method stub
// String orderType="";
// absOrder Order1=new LDorder();
// Order1.CreatePizza(orderType);
String loc = "bj";
if (loc.equals("bj")) {
//创建北京口味的各种Pizza
new BJorder();
} else {
//创建伦敦口味的各种Pizza
new LDorder();
}
}
}