学习笔记-轻量级Java EE:模式--工厂方法和抽象工厂

8 篇文章 0 订阅

在简单工厂模式上再次细分,为不同的产品类提供不同的工厂,即不同的工厂类生成不同的产品。

   与简单工厂一样,在添加新产品时,不会影响原有的代码,仅仅需要添加新的工厂类生产新产品即可;在抽象工厂中改变添加逻辑判断即可,有很好的扩展性和维护性

   提供一个工厂接口:

public interface OutputFactory
{
	//仅定义一个方法用于返回输出设备。
	Output getOutput();
}
以下俩个产品的工厂类继承该工厂接口:

public class PrinterFactory
	implements OutputFactory
{
	public Output getOutput()
	{
		//该工厂只负责产生Printer对象
		return new Printer();
	}
}
public class BetterPrinterFactory
	implements OutputFactory
{
	public Output getOutput()
	{
		//该工厂只负责产生BetterPrinter对象
		return new BetterPrinter();
	}
}
测试代码:

public static void main(String[] args) 
	{
		//使用PrinterFactory子类来创建OutputFactory
		OutputFactory of = new BetterPrinterFactory();
		//将Output对象传入,创建Computer对象
		Computer c = new Computer(of.getOutput());
		c.keyIn("轻量级Java EE企业应用实战");
		c.keyIn("疯狂Java讲义");
		c.print();
	}
由上可看出,每个工厂类只生产一个产品(可修改,一个工厂类可生产多个产品),虽然与具体的产品已解耦,但增加了一个问题,客户端不仅仅与工厂接口耦合,且与具体的产品工厂类耦合

在此,我们可以在增加一个工厂类,该工厂类不生产具体产品,而是生产产品工厂类,这种方式称之为抽象工厂模式;

例子:

public class OutputFactoryFactory
{
	//仅定义一个方法用于返回输出设备。
	public static OutputFactory getOutputFactory(
		String type)
	{
		if (type.equalsIgnoreCase("better"))
		{
			return new BetterPrinterFactory();
		}
		else
		{
			return new PrinterFactory();
		}
	}
}
测试代码:

public static void main(String[] args) 
	{
		//使用PrinterFactory子类来创建OutputFactory
		OutputFactory of = OutputFactoryFactory
			.getOutputFactory("better");
		//将Output对象传入,创建Computer对象
		Computer c = new Computer(of.getOutput());
		c.keyIn("轻量级Java EE企业应用实战");
		c.keyIn("疯狂Java讲义");
		c.print();
	}
这样,将客户端代码与具体的产品工厂类实现了解耦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值