{
// 仅定义一个方法用于返回输出设备。
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 class OutputFactoryFactory
{
// 仅定义一个方法用于返回输出设备。
public static OutputFactory getOutputFactory(
String type)
{
if (type.equalsIgnoreCase("better"))
{
return new BetterPrinterFactory();
}
else
{
return new PrinterFactory();
}
}
}
public class Computer
{
private Output out;
public Computer(Output out)
{
this.out = out;
}
// 定义一个模拟获取字符串输入的方法
public void keyIn(String msg)
{
out.getData(msg);
}
// 定义一个模拟打印的方法
public void print()
{
out.out();
}
public static void main(String[] args)
{
// 使用OutputFactoryFactory工厂类创建OutputFactory
OutputFactory of = OutputFactoryFactory
.getOutputFactory("better");
// 调用OuputFactory的方法获取Output对象,
// 并将Output对象传入,创建Computer对象
Computer c = new Computer(of.getOutput());
c.keyIn("轻量级Java EE企业应用实战");
c.keyIn("疯狂Java讲义");
c.print();
}
}
工厂方法中,客户端代码与不同的工厂类耦合。
抽象工厂类不再直接产生output对象,而是产生工厂类。