最近湖南台的综艺节目《中餐厅》火了,赵薇、黄晓明、张亮等合伙人在泰国开了一家中餐厅,备受中外朋友青睐。
顾客来到餐厅,说我想吃宫保鸡丁,然后合伙人一合计,说张亮比较拿手,然后让张亮去做,做完后端到顾客面前,顾客不会问,你这个宫保鸡丁谁做的呀?换句话说,顾客并不关心我点的菜,你们谁来做,只要你们中餐厅给我把宫保鸡丁做好就可以了。这个中餐厅就是个简单的工厂模式。
我们把《中餐厅》看成一个食物工厂,顾客下了单后,中餐厅根据不同的菜品生产不一样的食物,然后提供给顾客。
那么什么是简单工厂模式呢?简单工厂模式又叫静态工厂方法模式,被看成是工厂方法模式的一个特例,是由一个工厂对象决定创建出哪一种产品类的实例。
现在我们抽象出统一的“烹饪”接口,以湘菜、川菜、东北菜为例,分别实现不同的菜品。
package com.pattern.factory.simple;
public interface Food {
public void cooking();
}
package com.pattern.factory.simple;
public class HuNanFood implements Food {
public void cooking() {
System.out.println("又香又辣的湘菜上来咯...");
}
}
package com.pattern.factory.simple;
public class SiChuanFood implements Food {
@Override
public void cooking() {
System.out.println("美味的四川菜系上来咯...");
}
}
package com.pattern.factory.simple;
public class DongBeiFood implements Food {
@Override
public void cooking() {
System.out.println("东北乱炖一锅上咯...");
}
}
定义一个生产全部菜品的食物工厂,当顾客提交订单时,分别调用不同的角色去创建菜品。
package com.pattern.factory.simple;
public class FoodFactory {
public static Food food=null;
public static Food createFood(Class class1){
try {
food=(Food) Class.forName(class1.getName()).newInstance();
} catch (InstantiationException e) {
System.out.println("您得告诉我您点的什么菜呀!");
} catch (IllegalAccessException e) {
System.out.println("您点的菜不对呀,确定有这个菜吗?");
} catch (ClassNotFoundException e) {
System.out.println("您点的菜我们这儿没有!");
}
return food;
}
}
工厂角色:这是简单工厂模式的核心,由它负责创建所有的类的内部逻辑,创建所需要的产品对象。
抽象产品角色:它一般是具体产品继承的父类或者实现的接口,负责描述所有实例所共有的公共接口。
具体产品角色:简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。
简单工厂模式的优点是工厂类能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的,可以免除直接创建产品对象的责任,有利于整个软件体系结构的优化。缺点是这个工厂类负责所有的创建逻辑,当这个工厂出现问题时,所有的客户端都会受到牵连。且在产品种类日益增多,工厂类需要判断何时创建何种产品,造成业务逻辑混乱。工厂类和产品之间的耦合度太高,依赖性太大,降低了程序的灵活性和可维护性,违背了”开闭原则“(对扩展开放,对修改封闭)。
所以工厂方法模式应运而生,迫在眉睫。
源码下载:http://download.csdn.net/download/pelifymeng2/9994100