您的位置:首页 > 其它

工厂方法

2016-03-10 23:14 225 查看
上一章节笔者介绍的简单工厂,是将Printer和BetterPrinter的类归于一个工厂来管理。那么这一章节就是将Printer由PrinterFactory来管理,BetterPrinter由BetterPrinterFactopry来管理。UML类图如下。



下面笔者将给出上面模式的代码。

1) OutoutFactory的类。

public interface OutputFactory
{
// 仅定义一个方法用于返回输出设备。
Output getOutput();
}

2) PrinterFactory的类。

public class PrinterFactory
implements OutputFactory
{
public Output getOutput()
{
// 该工厂只负责产生Printer对象
return new Printer();
}
}


3) Printer的类。

// 让Printer类实现Output
public class Printer implements Output
{
private String[] printData = new String[MAX_CACHE_LINE];
// 用以记录当前需打印的作业数
private int dataNum = 0;
public void out()
{
// 只要还有作业,继续打印
while(dataNum > 0)
{
System.out.println("打印机打印:" + printData[0]);
// 把作业队列整体前移一位,并将剩下的作业数减1
System.arraycopy(printData , 1, printData, 0, --dataNum);
}
}
public void getData(String msg)
{
if (dataNum >= MAX_CACHE_LINE)
{
System.out.println("输出队列已满,添加失败");
}
else
{
// 把打印数据添加到队列里,已保存数据的数量加1。
printData[dataNum++] = msg;
}
}
}


4) BetterPrinterFactory的类。

public class BetterPrinterFactory
implements OutputFactory
{
public Output getOutput()
{
// 该工厂只负责产生BetterPrinter对象
return new BetterPrinter();
}
}


5) BetterPrinter的类。

public class BetterPrinter implements Output
{
private String[] printData = new String[MAX_CACHE_LINE * 2];
// 用以记录当前需打印的作业数
private int dataNum = 0;
public void out()
{
// 只要还有作业,继续打印
while(dataNum > 0)
{
System.out.println("高速打印机正在打印:" + printData[0]);
// 把作业队列整体前移一位,并将剩下的作业数减1
System.arraycopy(printData , 1, printData, 0, --dataNum);
}
}
public void getData(String msg)
{
if (dataNum >= MAX_CACHE_LINE * 2)
{
System.out.println("输出队列已满,添加失败");
}
else
{
// 把打印数据添加到队列里,已保存数据的数量加1。
printData[dataNum++] = msg;
}
}
}

6) Output的类。

public interface Output
{
// 接口里定义的属性只能是常量
int MAX_CACHE_LINE = 50;
// 接口里定义的只能是public的抽象实例方法
void out();
void getData(String msg);
}


7) Computer的类。

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)
{
// 使用BetterPrinterFactory子类来创建OutputFactory
OutputFactory of = new BetterPrinterFactory();
// 将Output对象传入,创建Computer对象
Computer c = new Computer(of.getOutput());
c.keyIn("Betterprinter:owen");
c.keyIn("Betterprinter:william");
c.print();

// 使用PrinterFactory子类来创建OutputFactory
OutputFactory of1 = new PrinterFactory();
// 将Output对象传入,创建Computer对象
Computer c1 = new Computer(of1.getOutput());
c1.keyIn("printer:owen");
c1.keyIn("printer:william");
c1.print();
}
}


8) 执行的结果。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: