设计模式第二篇 工厂模式(2) 工厂方法模式 factory method

简单工厂模式 (参见http://blog.csdn.net/zj_1395201/article/details/6648340)的核心是那个核心工厂类,其决定何时创建哪一个具体产品。这样做的优点可以使客户端不必负责产品的具体创建,只需要消费产品即可。但是缺点是如果具体产品的种类很多的话,核心工厂类中判断逻辑会很复杂,而且如果需要加入新的产品时,就需要将创建该新产品的逻辑加入到核心工厂类中去!

工厂方法模式是简单工厂模式的进一步抽象与推广,由于运用了多态性,既继承了简单工厂模式的优点,又客服了其缺点。下面我们就来解释下工厂方法模式:

工厂方法模式的核心工厂类不再决定创建具体的产品,而是将创建具体产品的操作交给了子工厂类,而子工厂会对应一个具体的产品,并且负责其的创建工作。所以我们可以看出,此时的核心工厂类已经变成了一个抽象工厂角色,仅仅向子工厂提供必须实现的接口。其工作结构如下图所示:

这种进一步抽象的效果可以达到在需要加入新产品的时候,不需要修改具体的工厂类的效果!

 

抽象工厂:

public interface Creator {

	public Fruit getFruit();
	
}


具体工厂1:

public class AppleCreator implements Creator {

	@Override
	public Fruit getFruit() {
		return new Apple();
	}

}

 

具体工厂2:

public class GrapeCreator implements Creator {

	@Override
	public Fruit getFruit() {
		// TODO Auto-generated method stub
		return new Grape();
	}

}

 

抽象产品:

public interface Fruit {

	/**
	 * 种植
	 */
	 public void plant();
	 
	 
}


具体产品1:

public class Grape implements Fruit {

	public Grape(){
		System.out.println("Grape is produced...");
	}
	
	@Override
	public void plant() {
		System.out.println("Grape is plant...");
	}

}


具体产品2:

public class Apple implements Fruit {

	public Apple(){
		System.out.println("Apple is produced...");
	}
	
	@Override
	public void plant() {
		System.out.println("Apple is plant...");
	}

	
}

客户端消费产品 :

public class Client {

	
	public static void main(String[] args) {
		
		Creator c1 = new AppleCreator();
		Fruit apple = c1.getFruit();
		System.out.println("=============");
		Creator c2 = new GrapeCreator();
		Fruit grape = c2.getFruit();
		
	}

}





 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值