《java与模式》读书笔记之二----工厂方法模式


        工厂方法模式较简单工厂模式,最大的改进就在于,工厂类被抽象出来。具体的工厂子类负责具体的产品创建,再也不是一个工厂类集万千责职于一身了。这样一来,工厂方法模式就涉及以下四个角色:

  • 抽象工厂:这个角色仍然是工厂方法模式的核心,只是它再也应用无太大关系。
  • 具体工厂:抽象工厂的实现类,与应用有着密切的联系
  • 抽象产品:产品的接品的定义,在工厂方法模式中,产品可能存在多层的继续关系,因为可能存在多层的抽象产品。
  • 具体产品:具体工厂要创建的对象

    

         反映到代码中如下:

package com.pattern.factory.method;

public interface Product {

}

package com.pattern.factory.method;

public class ConcreteProduct1 implements Product {

}

package com.pattern.factory.method;

public class ConcreteProduct2 implements Product {

}

package com.pattern.factory.method;

public interface Creator {

	public Product factory();
}

package com.pattern.factory.method;

public class ConcreteCrector1 implements Creator {

	@Override
	public Product factory() {
		
		return new ConcreteProduct1();
	}

}

package com.pattern.factory.method;

public class ConcreteCrector2 implements Creator {

	@Override
	public Product factory() {
		
		return new ConcreteProduct2();
	}

}

package com.pattern.factory.method;

public class Client {

	private static Creator creator1,creator2;
	private static Product prod1,prod2;
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		creator1 = new ConcreteCrector1();
		creator2 = new ConcreteCrector2();
		
		prod1 = creator1.factory();
		prod2 = creator2.factory();
		
	}

}


那么想更好的体会,可以把上一章中简单工厂模式中的农场的例子,用工厂方法模式来改进,这时会发现,增加水果时不再需要更改原有的代码。只需要新增具体产品,新增工厂则可。那么从这个意义来说:工厂方法模式是完全支持开--闭模式的。



那么在JDK中,那个地方用到这个模式列?如书中提到的List接口:


    List接口中定义了一iterator()方法,规定要返回一个Iterator对象,而具体的List实现类,则实现了该方法,关返回相关的对象。 在这个例子中,List扮演了抽象工厂方法类,具体的子类扮演具体的实现工厂,而Iterator扮演的是抽象产品,而具体的Iterator子类,则是具体产品。这就是这个模式的很好应用。


    那么我们似乎可以总结出这么一个特点: 一个接口的有一个返回另一个抽象(接口或抽象类)的方法的这种特征,都可以规纳到工厂方法模式中来。切不可以将产品笼统的定义为简单的Pojo对象,他有可能是一个包含了自己行为的JavaBean




评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值