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