2.工厂方法模式(Factory Method)

定义:

定义一个用于创建对象的接口,让子类来决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。

它是简单工厂模式的一种延伸。

 

例子:

Spring中ApplicationContext的getBean方法就是典型的工厂方法模式。

 

工厂方法的通用代码:

产品抽象类

package _2FactoryMethodPattern;

public abstract class Product {

	public void method1()
	{
		//处理业务逻辑
	}
	 
	public abstract void method2();
}

产品实现类1

package _2FactoryMethodPattern;

public class SubProduct1 extends Product {

	@Override
	public void method2() 
	{
		
	}

}

产品实现类2

package _2FactoryMethodPattern;

public class SubProduct2 extends Product {

	@Override
	public void method2() 
	{
		
	}

}

工厂接口类

package _2FactoryMethodPattern;

public interface IProductFactory {
	public <T extends Product> T createProduct(Class<T> c);
}

工厂实现类

package _2FactoryMethodPattern;

public class ProductFactory implements IProductFactory {

	@SuppressWarnings("unchecked")
	@Override
	public <T extends Product> T createProduct(Class<T> c) {
		Product p = null;
		try {
			p = (Product)Class.forName(c.getName()).newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return (T)p;
	}

}

client类

package _2FactoryMethodPattern;

public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		IProductFactory factory = new ProductFactory();
		Product product = factory.createProduct(SubProduct1.class);
		// 继续业务逻辑
	}

}

工厂方法模式的优点:

  1. 良好的封装性,代码结构清晰
  2. 工厂方法模式的扩张性非常优秀
  3. 屏蔽产品类
  4. 工厂方法模式是典型的解耦框架

工厂方法模式的应用场景

  1. 工厂方法模式是new一个对象的替代品,所以在需要生成对象的地方都可以使用,但是需要慎重的考虑是否需要增加一个工厂类进行管理,增加代码的复杂度。
  2. 需要灵活的、可扩展的框架时,可以考虑使用工厂方法模式。
  3. 可以使用在测试驱动开发的框架下。例如,测试一个类A,就需要把与类A有关联的类B也同时产生出来,我们可以使用工厂方法模式把类B虚拟出来,避免A和B的耦合。

猜你喜欢

转载自wangwengcn.iteye.com/blog/1704975