转载请注明出处:http://blog.csdn.net/droyon/article/details/8683919
简单工程模式:简单工厂并不是一个设计模式,它是一种变成习惯。
案例分析:
在去上地软件园的路上,有很多粥店。现在可能少了,也就一两家。他们卖的粥用纸杯装盛,你只需要告诉他们什么粥即可。他们那里有大米粥,小米粥,八宝粥。
案例代码下载
1、Congee.java//粥基类
public class Congee { private String name; public Congee(String name){ this.name = name; } public void takeCup(){ System.out.println("拿出一个纸杯"); } public void fillCongee(){ System.out.println("装入"+name); } public void sell(){ System.out.println("卖出这杯粥,价格:"+getPrice(name)+"元"); } private double getPrice(String name){ if(name.equals("大米粥")){return 2;} if(name.equals("小米粥")){return 2;} if(name.equals("八宝粥")){return 2.5;} if(name.equals("黑米粥")){return 2.5;} return 0; } }2、Damizhou.java
public class Damizhou extends Congee{ public Damizhou() { super("大米粥"); } }
public class Xiaomizhou extends Congee{ public Xiaomizhou() { super("小米粥"); } }
public class Babaozhou extends Congee{ public Babaozhou() { super("八宝粥"); } }
public class SimpleFactory { public /*static*/ Congee getCongee(String name){ if(name.equals("大米粥")){ return new Damizhou(); }else if(name.equals("小米粥")){ return new Xiaomizhou(); }else if(name.equals("八宝粥")){ return new Babaozhou(); }else { return new Congee("null"); } } }
public class CongeeStore { private SimpleFactory factory; public CongeeStore(SimpleFactory factory){ this.factory = factory; } public void buyCongee(String name){ System.out.println("来一份:"+name); sellCongee(name); } private void sellCongee(String name){ Congee congee = factory.getCongee(name); congee.takeCup(); congee.fillCongee(); congee.sell(); } }7、Test.java
public class Test { public static void main(String args[]){ SimpleFactory factory = new SimpleFactory(); CongeeStore congeeStore = new CongeeStore(factory); //有人买一份大米粥 congeeStore.buyCongee("大米粥"); System.out.println("----------------------------------------"); //有人想买八宝粥 congeeStore.buyCongee("八宝粥"); } }运行结果:
来一份:大米粥 拿出一个纸杯 装入大米粥 卖出这杯粥,价格:2.0元 ---------------------------------------- 来一份:八宝粥 拿出一个纸杯 装入八宝粥 卖出这杯粥,价格:2.5元
总结:在工厂类中处理创建对象的细节,从具体的使用类中分离。我们在CongeeStroe类中使用Congee,在SimpleFactory类中处理创建的细节。
在这个例子中,我们的需要初始化一个工厂类,然后才能使用getCongee方法,其实我们也可以将getCongee声明为静态类,这样就可以直接使用这个类了。