工厂模式

一直感觉自己不是个称职的程序员,原因在哪始终找不到,这些天经过一系列的打击之后貌似找到了一些方向,首先就是设计模式和数据结构,好了废话不多说,今天写简单工厂模式。看了好多博客和代码,借鉴了这个人的博客:http://blog.youkuaiyun.com/weiwenlongll/article/details/6918164

我觉的简单工厂模式有一个通用的图,以后大家在遇到工场的时候首先想到这个图,记住这个图,以后的路就好走了:

  简单工厂模式解决的问题是:如何去实例化一个合适的对象。

  简单工厂模式的核心思想就是:有一个专门的类来负责创建实例的过程。


图如下:


大家看这个图,这里有一个工场负责创建产品,通常在简单工场设计模式中会有一个产品类,这个类的作用就是给下边的具体类继承。好下面举个例子:

场景:本人程序猿一枚,有女票(大家不要羡慕),但是女票有很多闺蜜,所以必须搞定这些闺蜜,当然,请吃饭就是其中必须的一环(虽然心疼钱,但是为了女票值了),

我要请女票的三个闺蜜吃肯德基,每个人的口味不一样,当然,大家都知道这个流程,几个人到肯德基点餐,之后肯德基给你食物,然后付账就是我的事了。

大家注意几点,我并不能生产食物,当然是肯德基生产食物,我们来消费,肯德基抱恨很多食物,有鸡腿,猪肉,薯条等等,所以把这个过程抽象成上边的通用图,如下:


这样的话我们就好理解了,我们需要创建这些类:

1.Food类,get方法(假设能获得食物)

2.鸡腿类(Chicken,继承自Food)

3.薯条类(Chips,继承自Product)

4.工厂类(KFC类,最重要,生产食物)

代码实现如下:

Food类:

package SimpleFactory;

public interface Food {
	public String getFood();// 获得食物方法
}
Chicken类:

package SimpleFactory;

public class Chicken implements Food{

	@Override
	public String getFood() {
		System.out.println("获得一个鸡腿!!!");
		return "Chicken";
	}

}
Chips类:

package SimpleFactory;

public class Chips implements Food{

	@Override
	public String getFood() {
		System.out.println("获得一个薯条!!!");
		return "Chips";
	}

}
KFCFactory类:

package SimpleFactory;
/**
 * 工场类:调用食物类生产食物
 * 
 *
 */
public class KFCFactory {
	public static Food createFood(String foodName){
		Food food = null;
		switch(foodName){
			case "Chicken":
				food = new Chicken();
				break;
			case "Chips":
				food = new Chips();
				break;
			default:
				food = null;
		}
		return food;
	}
}


测试类:

package SimpleFactory;

public class Test {
	public static void main(String[] args){
		KFCFactory ff = new KFCFactory();
		Food foodChichen = ff.createFood("Chicken");
		String chicken = foodChichen.getFood();
		Food foodChips = ff.createFood("Chips");
		String chips = foodChips.getFood();
		
		if(chicken == null){
			System.out.println("没有这个对应的工厂类!!!");
		}
		if(chips == null){
			System.out.println("没有这个对应的工厂类!!!");
		}
	}
}



输出:

获得一个鸡腿!!!
获得一个薯条!!!
这样,我们就实现了一个简单的简单工厂模式范例。刚刚入门,希望大牛们指出错误。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值