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

本文通过一个简单的粥店销售场景,介绍了简单工厂模式的概念及其应用。通过实例代码展示了如何利用简单工厂模式来创建不同类型的粥对象,并实现了具体业务逻辑。

转载请注明出处:http://blog.youkuaiyun.com/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声明为静态类,这样就可以直接使用这个类了。





评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hailushijie

您的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值