您的位置:首页 > 编程语言 > Java开发

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

2014-01-03 11:40 411 查看
在简单工厂模式上再次细分,为不同的产品类提供不同的工厂,即不同的工厂类生成不同的产品。

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

提供一个工厂接口:

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();
}
这样,将客户端代码与具体的产品工厂类实现了解耦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: