欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-09 16:15:25
...

定义:

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

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

 

例子:

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的耦合。
相关标签: 工厂方法模式