简单工厂模式

来源:互联网 发布:淘宝网花卉 编辑:程序博客网 时间:2024/06/14 12:43
public class OrderPizza {

public OrderPizza() {
pizza pizza=null;

String ordergetType;



do {
ordergetType=getType();
if(ordergetType.equals("butter")){
pizza=new butterPizza();
}else if(ordergetType.equals("greek")){
pizza=new greekPizza();
}else if(ordergetType.equals("chocolate")){
pizza=new chocolatePizza();
}else 
break;
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 abstract class pizza {


public abstract void prepare();
    String name ;


public void bake() {
System.out.println(name+"烘焙中");
}


public void cut() {
System.out.println(name+"切割中");
}


public void box() {
System.out.println(name+"包装中");
}
public void setname(String name)
{
this.name=name;
}
}


public class chocolatePizza extends pizza {


@Override
public void prepare() {
super.setname("chocolatePizza");
         System.out.println(name+"准备中");
}


}




其他蛋糕:省略


蛋糕店蛋糕销售系统:当用户输入chocolate的时候自动走生产该蛋糕流程。
暂时不考虑退货退款什么,包括除了材料可能不能将prepare方法进行抽象,其他都默认为一样,虽然可能细节不同,但基本认为是具体行为。
现在问题是说比如要新增个新口味的pizza那么就得改动Order类,并且进行重新编译,比如新增chocolate披萨,那么就得新增
else if(ordergetType.equals("chocolate")){
pizza=new chocolatePizza();
}

,耦合性高。所以将变化的萃取出来封装为一个实例化的对象的类。其实就好像你的写个API,但是你的系统数据库或者缓存里面存了是好几个大企业的数据,那么每个企业他们要求的数据又不太一样,那么此时就得使用简单工厂模式,将不同的sql查询实例封装起来,就是简单工厂模式。

public class singleFactory {



public pizza CreatePizza(String ordergetType) {

pizza pizza=null;
if(ordergetType.equals("butter")){
pizza=new butterPizza();
}else if(ordergetType.equals("greek")){
pizza=new greekPizza();
}else if(ordergetType.equals("chocolate")){
pizza=new chocolatePizza();
}else 
return null;
return pizza;

}
}

简单工厂模式的设计方案:定义一个实例化的披萨对象的类,封装创建对象的代码。
简单工厂模式:定义一个创建对象,由这个类来封装实例化对象的行为。

原创粉丝点击