一直感觉自己不是个称职的程序员,原因在哪始终找不到,这些天经过一系列的打击之后貌似找到了一些方向,首先就是设计模式和数据结构,好了废话不多说,今天写简单工厂模式。看了好多博客和代码,借鉴了这个人的博客: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("没有这个对应的工厂类!!!");
}
}
}
输出:
获得一个鸡腿!!!
获得一个薯条!!!
这样,我们就实现了一个简单的简单工厂模式范例。刚刚入门,希望大牛们指出错误。