工厂方法模式设计方案:
1.讲披萨项目里的披萨对象实例化功能抽象成抽象方法,在不同加盟店具体实现功能。
2.定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类
public interface AbsFactory {
public Pizza CreatePizza(String ordertype);
}
public class NYFactory implements AbsFactory{
@Override
public Pizza CreatePizza(String ordertype) {
Pizza pizza=null;
if(ordertype.equals("cheese")){
pizza=new NYCheesePizza();
}else if(ordertype.equals("pepper")){
pizza=new PepperPizza();
}
return pizza;
}
}
public class LDFactory implements AbsFactory{
public Pizza CreatePizza(String ordertype) {
Pizza pizza=null;
if(ordertype.equals("cheese")){
pizza=new LDCheesePizza();
}else if(ordertype.equals("pepper")){
pizza=new LDPepperPizza();
}
return pizza;
}
}
public abstract class Pizza {
protected 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 String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class NYCheesePizza extends Pizza {
@Override
public void prepare() {
super.setName("NYCheesePizza");
System.out.println(name+"preparing");
}
}
public class OrderPizza2 {
AbsFactory mFactory;
public OrderPizza2(AbsFactory mFactory){
setFactory(mFactory);
}
public void setFactory(AbsFactory mFactory){
Pizza pizza=null;
String ordertype;
this.mFactory=mFactory;
do{
ordertype=gettype();
pizza=mFactory.CreatePizza(ordertype);
if(pizza!=null){
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
}
}while(true);
}
private String gettype() {
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 "";
}
}
}
public class PizzaStroe {
public static void main(String[] args) {
OrderPizza2 mOrderPizza;
mOrderPizza=new OrderPizza2(new NYFactory());
}