【设计模式四之工厂方法模式】java工厂方法模式

##工厂方法模式
前一篇http://blog.csdn.net/qq_29924041/article/details/59118775文章中提到了简单工厂模式
用小米举的栗子,本篇幅主要讲解的是工厂方法模式,依旧用的是小米;
先上张图:
这里写图片描述

图说小米工厂方法模式:
小米现在旗下有手机XiaoMiShoujiProduct,手环XiaoMiShouHuanProduct,电脑业务XiaoMiConputerProduct,但是这些产品都统一是小米的相关产品XiaoMiPoduct,那么小米就需要有对应的工厂来生产这些产品,那之前的简单工厂模式,是一个工厂,在不同的时间段,或者分成不同的车间,来生产这些产品,但是工厂方法模式中,我们需要用不同的工厂来生产对应的产品,所以现在也就有了XiaoMiComputerFactory,XiaoMiShouHuanFactory,XiaoMiShoujiFactory,但是他们应该有这一个共同的特性就是"都是小米的生产工厂"吧,所以也就抽象出来一个XiaoMiFactory;
那么到这里,应该都很好理解了吧,小米工厂生产产品,那么工厂方法模式,就是一个工厂对应一种产品这样的生产,思路很简单,下面直接上代码:

XiaoMiFactory(小米总工厂)

package com.demo.FactoryMethod;

public abstract class XiaoMiFactory {
	public abstract XiaoMiProduct produceProduct();
}

XiaoMiProduct(小米总产品)

package com.demo.FactoryMethod;

public abstract class XiaoMiProduct {
	public abstract String getProductName();
}

XiaoMiComputerFacotry(电脑生产工厂)

package com.demo.FactoryMethod;

public class XiaoMiComputerFacotry extends XiaoMiFactory {

	@Override
	public XiaoMiProduct produceProduct() {
		// TODO Auto-generated method stub
		return new XiaoMiComputerProduct();
	}

}

XiaoMiComputerProduct(电脑产品)

package com.demo.FactoryMethod;

public class XiaoMiComputerProduct extends XiaoMiProduct{

	@Override
	public String getProductName() {
		// TODO Auto-generated method stub
		System.out.println("XiaoMiComputerProduct");
		return "XiaoMiComputerProduct";
	}

}

XiaoMiShouHuanFacotry(小米手环工厂)

package com.demo.FactoryMethod;

public class XiaoMiShouHuanFacotry extends XiaoMiFactory{

	@Override
	public XiaoMiProduct produceProduct() {
		// TODO Auto-generated method stub
		return new XiaoMiShouHuanProduct();
	}

}

XiaoMiShouHuanProduct(小米手环产品)

package com.demo.FactoryMethod;

public class XiaoMiShouHuanProduct extends XiaoMiProduct{

	@Override
	public String getProductName() {
		// TODO Auto-generated method stub
		System.out.println("XiaoMiShouHuanProduct");
		return "XiaoMiShouHuanProduct";
	}

}

XiaoMiShoujiFactory(小米手机工厂)

package com.demo.FactoryMethod;

public class XiaoMiShoujiFactory extends XiaoMiFactory{

	@Override
	public XiaoMiProduct produceProduct() {
		// TODO Auto-generated method stub
		return new XiaoMiShoujiProduct();
	}

}

XiaoMiShoujiProduct(小米手机产品)

package com.demo.FactoryMethod;

public class XiaoMiShoujiProduct extends XiaoMiProduct{

	@Override
	public String getProductName() {
		// TODO Auto-generated method stub
		System.out.println("XiaoMiShoujiProduct");
		return "XiaoMiShoujiProduct";
	}

}

测试代码:

package com.demo.FactoryMethod;

public class FactoryMethodTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		XiaoMiFactory xiaoMiFactory = new XiaoMiComputerFacotry();
		XiaoMiFactory xiaoMiShoujiFactory = new XiaoMiShoujiFactory();
		XiaoMiFactory xiaoMiShouHuanFactory = new XiaoMiShouHuanFacotry();
		xiaoMiFactory.produceProduct().getProductName();
		xiaoMiShoujiFactory.produceProduct().getProductName();
		xiaoMiShouHuanFactory.produceProduct().getProductName();
	}
}

结果就不在这里run了。有兴趣的可以copy代码下去run一下,
其实无论是简单工厂模式,还是工厂方法模式,其思路相对来说都是比较简单的,简单工厂模式就是一个工厂能够生产不同的产品,而工厂方法模式就是一个工厂对应一个产品的生产过程,其实在上面也可以看到,简单工厂模式主要造成没增加一个产品的时候都是需要去对工厂类进行修改的过程,违反了开闭原则,而工厂方法模式的方法,对扩展来说相对来说是比较容易的,但是工厂方法模式其实也是有一个很大的弊端,也就是在上面可以看到的,就是怎么这样的一个生产过程会有辣么多的类生成,无疑,工厂方法模式的类确实是有点多,这就给我们的项目增加了点类。有利就有弊,都是把双刃剑,所以在实战的时候,要选择好最适合自己的

谢谢大家的访问
##欢迎访问博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值