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的耦合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值