标签:
工厂模式优点:
设计模式书中说道,如果对象的初始化的过程很长很复杂,放在构造器中是很危险的,就像很多鸡蛋放到一个篮子里。所以要把对象的创建过程抽象独立出来。
统一管理对象的实例化
你的程序简单体现不出来,如果大规模的企业程序里要创建成千上万个对象,每个都去new,程序的业务逻辑
就很混乱,统一由工厂创建,就比清晰,进一步降低耦合(比如spring,就好比一个大工厂)
工厂就是你要什么去到工厂里拿就好了,工厂负责生产,你除了使用什么都不用管,小程序你看不出优势来,打个比方说如果12亿人人,一人一个电视,那么如果每个人都去工厂里制造是多么麻烦的事,你只要告诉他你要什么类型的,工厂会生产出来给你,这个就是通俗意义上的工厂模式了。
至于说使用这个的好处,可以方便的更改应用程序,方便扩展。比如说你修改了一个类,或者在这个类的基础上生成了一个子类那么你现在要把以前使用父类的地方都给改为子类,如果小程序可能有几十个地方要改,如果大一点可能就几百几千个地方要改了。如果使用工厂模式,你只要改一个地方就可以了。
有工厂对象创建对象时,通常还需要结合接口,创建的对象返回的是接口的类型
具体调用者不负责创建对象,当要创建的对象发生改变时,只需要修改工厂,而不需要修改调用者。
package com.jhl.designPattern.SimpleFactory;
/*
* 产品的抽象接口
*/
public interface Food {
/*
* 获得相应的食物
*/
public void get();
}
package com.jhl.designPattern.SimpleFactory.impl;
import com.jhl.designPattern.SimpleFactory.Food;
/*
* 薯条对抽象产品接口的实现
*/
public class Chips implements Food{
/*
* 获取一份薯条
*/
public void get(){
System.out.println("我要一份薯条");
}
}
package com.jhl.designPattern.SimpleFactory.impl;
import com.jhl.designPattern.SimpleFactory.Food;
/*
* 麦香鸡对抽象产品接口的实现
*/
public class McChicken implements Food {
/*
* 获取一份麦香鸡
*/
public void get() {
System.out.println("我要一份麦香鸡");
}
}
package com.jhl.designPattern.SimpleFactory.impl;
import com.jhl.designPattern.SimpleFactory.Food;
public class FoodFactory {
public static Food getFood(String type) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
Food food = (Food) Class.forName(type).newInstance();
return food;
}
}
package com.jhl.designPattern.SimpleFactory.client;
import com.jhl.designPattern.SimpleFactory.Food;
import com.jhl.designPattern.SimpleFactory.impl.FoodFactory;
/*
* 测试客户端
*/
public class SimpleFactoryTest {
private static final String MCCHICKEN = "com.jhl.designPattern.SimpleFactory.impl.McChicken";
private static final String CHIPS = "com.jhl.designPattern.SimpleFactory.impl.Chips";
private static final String EGGS = "com.jhl.designPattern.SimpleFactory.impl.Eggs";
public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
// 实例化各种食物
Food mcChicken = FoodFactory.getFood(MCCHICKEN);
Food chips = FoodFactory.getFood(CHIPS);
//Food eggs = FoodFactory.getFood(EGGS);
// 获取食物
if (mcChicken != null) {
mcChicken.get();
}
if (chips != null) {
chips.get();
}
//if (eggs != null) {
//eggs.get();
//}
}
}
标签:
原文地址:http://my.oschina.net/u/189445/blog/512343