简单工厂模式是类的创建模式,又叫做静态工厂方法模式。就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例。
为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。
下面我给个实例,简单的了解一下简单工厂。
这里建一个简单的汽车接口,需要什么汽车工厂就生产什么汽车,然后供给用户使用。
//新建接口:Car.java public interface Car { //汽车启动 public void startCar(); //汽车停止 public void stopCar(); } //建一个汽车工厂类:CarFactory.java public class CarFactory { public static final String AUDI = "奥迪"; public static final String HONG_QI = "红旗"; /** * * @param 要求生产的汽车类型 * @return car */ public static Car productCar(String type) { Car car = null; if(AUDI.equals(type)) { //....省略生产audi汽车的繁杂工序 car = new AUDICar(); }else if(HONG_QI.equals(type)) { //....省略生产红旗汽车的繁杂工序 car = new HongQiCar(); }else { throw new RuntimeException("生产过程中产生错误!"); } return car; } } //两种汽车:AUDICar.java public class AUDICar implements Car{ public void startCar() { System.out.println("奥迪汽车启动--->AUDICar.startCar()"); } public void stopCar() { System.out.println("奥迪汽车停止--->AUDICar.stopCar()"); } } //HongQiCar.java public class HongQiCar implements Car { public void startCar() { System.out.println("红旗汽车启动--->AUDICar.startCar()"); } public void stopCar() { System.out.println("红旗汽车启动--->AUDICar.startCar()"); } } //用户从工厂取得汽车:Client.java public class Client { public static void main(String[] args) { //取得奥迪汽车 Car car = CarFactory.productCar(CarFactory.AUDI); car.startCar(); car.stopCar(); //取得红旗汽车 Car car1 = CarFactory.productCar(CarFactory.HONG_QI); car1.startCar(); car1.stopCar(); } }
使用工厂方法 要注意几个角色,首先你要定义产品接口,如上面的Car,产品接口下有Car接口的实现类,如HongQiCar,其次要有一个CarFactory类,用来生成产品Car。
简单工厂模式的核心是工厂类,这个类负责产品的创建,而客户端可以免去产品创建的责任,这实现了责任的分割。但由于工厂类集中了所有产品创建逻辑的,如果不能正常工作的话会对系统造成很大的影响。如果增加新产品必须修改工厂角色的源码改工厂角色的源码,所以就产生了稍微复杂的抽象工厂,以后再做介绍。
参考资料:
简单工厂—百度百科:http://baike.baidu.com/view/1638419.htm
简单工厂—互动百科:
http://www.hudong.com/wiki/%E7%AE%80%E5%8D%95%E5%B7%A5%E5%8E%82%E6%A8%A1%E5%BC%8F