设计模式之简单工厂模式学习案例代码

转载请注明出处: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("大米粥");
	}

}

3、Xiaomizhou.java

public class Xiaomizhou extends Congee{

	public Xiaomizhou() {
		super("小米粥");
	}
	
}

4、Babaozhou.java

public class Babaozhou extends Congee{

	public Babaozhou() {
		super("八宝粥");
	}

}

5、SimpleFactory.java

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");
		}
	}
}

6、CongeeStore.java

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声明为静态类,这样就可以直接使用这个类了。





你可能感兴趣的:(设计模式之简单工厂模式学习案例代码)