Java设计模式--简单工厂模式【Simple Factory Pattern】

      最近湖南台的综艺节目《中餐厅》火了,赵薇、黄晓明、张亮等合伙人在泰国开了一家中餐厅,备受中外朋友青睐。

      顾客来到餐厅,说我想吃宫保鸡丁,然后合伙人一合计,说张亮比较拿手,然后让张亮去做,做完后端到顾客面前,顾客不会问,你这个宫保鸡丁谁做的呀?换句话说,顾客并不关心我点的菜,你们谁来做,只要你们中餐厅给我把宫保鸡丁做好就可以了。这个中餐厅就是个简单的工厂模式。

     我们把《中餐厅》看成一个食物工厂,顾客下了单后,中餐厅根据不同的菜品生产不一样的食物,然后提供给顾客。

     那么什么是简单工厂模式呢?简单工厂模式又叫静态工厂方法模式,被看成是工厂方法模式的一个特例,是由一个工厂对象决定创建出哪一种产品类的实例。

   现在我们抽象出统一的“烹饪”接口,以湘菜、川菜、东北菜为例,分别实现不同的菜品。

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

你可能感兴趣的:(Java设计模式)