java设计模式(3):抽象工厂模式(Abstract Factory)(二)
2014-11-23 23:19:25
·
作者:
·
浏览: 1
te int dataNum = 0;
@Override
public void getData(String msg)
{
if(dataNum >= MAX_CACHE_LINE * 2)
{
System.out.println("输出队列已满,添加失败");
}
else
{
printData[dataNum++] = msg;
}
}
@Override
public void out()
{
while(dataNum>0)
{
System.out.println("戴尔高速打印机打印: "+printData[0]);
System.arraycopy(printData,1,printData,0,--dataNum);
}
}
}
/**
* 戴尔普通打印机
*/
public class DellCommonPrinter extends Printer
{
private final int MAX_CACHE_LINE = 10;
private String[] printData = new String[MAX_CACHE_LINE];
private int dataNum = 0;
@Override
public void getData(String msg)
{
if(dataNum >= MAX_CACHE_LINE)
{
System.out.println("输出队列已满,添加失败");
}
else
{
printData[dataNum++] = msg;
}
}
@Override
public void out()
{
while(dataNum>0)
{
System.out.println("戴尔普通打印机打印: "+printData[0]);
System.arraycopy(printData,1,printData,0,--dataNum);
}
}
}
/**
* 惠普高速打印机
*/
public class HpBetterPrinter extends Printer
{
private final int MAX_CACHE_LINE = 10;
private String[] printData = new String[MAX_CACHE_LINE * 2];
private int dataNum = 0;
@Override
public void getData(String msg)
{
if(dataNum >= MAX_CACHE_LINE * 2)
{
System.out.println("输出队列已满,添加失败");
}
else
{
printData[dataNum++] = msg;
}
}
@Override
public void out()
{
while(dataNum>0)
{
System.out.println("惠普高速打印机打印: "+printData[0]);
System.arraycopy(printData,1,printData,0,--dataNum);
}
}
}
/**
* 惠普普通打印机
*/
public class HpCommonPrinter extends Printer
{
private final int MAX_CACHE_LINE = 10;
private String[] printData = new String[MAX_CACHE_LINE];
private int dataNum = 0;
@Override
public void getData(String msg)
{
if(dataNum >= MAX_CACHE_LINE)
{
System.out.println("输出队列已满,添加失败");
}
else
{
printData[dataNum++] = msg;
}
}
@Override
public void out()
{
while(dataNum>0)
{
System.out.println("惠普普通打印机打印: "+printData[0]);
System.arraycopy(printData,1,printData,0,--dataNum);
}
}
}
制造出一个想要的工厂,去生产相对应的打印机
/*
* 制造出一个想要的工厂,去生产相对应的打印机
*/
public class PrinterFactoryFactory
{
public PrinterFactory getPrintFactory(String type)
{
if(type.equals("common"))//造出一个生产普通打印机的工厂
{
return new CommonPrinterFactory();
}
else if(type.equals("better"))//造出一个生产高速打印机的工厂
{
return new BetterPrinterFactory();
}
else if(type.equals("dell"))//造出一个生产戴尔打印机的工厂
{
return new DellPrinterFactory();//造出一个生产惠普打印机的工厂
}
else if(type.equals("hp"))
{
return new HpPrinterFactory();
}
else
{
return null;
}
}
}
最后是测试了,我们定义一台计算机,由它调用工厂去生产我们需要的打印机。 需要什么品牌什么类型的打印机,只需要获得生产对应类型的工厂,再由工厂生产具体的打印机。这里我们有四个类型的工厂,打个比方,1)惠普公司本部可以有个工厂,它能生产惠普品牌的普通或高速型打印机:2)戴尔公司本部也有个工厂,它能生产惠普品牌的普通或高速型打印机:3)然而也有些高低端的代工厂愿意给那些大公司生产打印机,有专门生产普通打印机的低端工厂,它可以生产惠普、戴尔型号的低端打印机;4)当然也有高端型的代工厂,给惠普、戴尔生产它们的高端型品牌。
在这里,无论我们需要什么品牌什么类型的打印机,我们要么在这个品牌的工厂拿到,要么在高端或低端代工厂拿到。
public class Computer
{
private Printer out;
public Computer(Printer out)
{
this.out = out;
}
public void keyIn(String msg)
{
out.getData(msg);
}
public void print()
{
out.out();
}
public static void main(String[] args)
{
PrinterFactoryFactory pff