閱讀913 返回首頁    go 外匯


【設計模式】【工廠方法】

/**
 * Description:
 * <br/>網站: <a href="https://www.crazyit.org">瘋狂Java聯盟</a> 
 * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public interface Output
{
	//接口裏定義的屬性隻能是常量
	int MAX_CACHE_LINE = 50;
	//接口裏定義的隻能是public的抽象實例方法
	void out();
	void getData(String msg);
}



/**
 * Description:
 * <br/>網站: <a href="https://www.crazyit.org">瘋狂Java聯盟</a> 
 * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */

//讓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;
		}
	}
}



/**
 * Description:
 * <br/>網站: <a href="https://www.crazyit.org">瘋狂Java聯盟</a> 
 * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
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;
		}
	}
}

/**
 * Description:
 * <br/>網站: <a href="https://www.crazyit.org">瘋狂Java聯盟</a> 
 * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public interface OutputFactory
{
	//僅定義一個方法用於返回輸出設備。
	Output getOutput();
}

/**
 * Description:
 * <br/>網站: <a href="https://www.crazyit.org">瘋狂Java聯盟</a> 
 * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public class PrinterFactory
	implements OutputFactory
{
	public Output getOutput()
	{
		//該工廠隻負責產生Printer對象
		return new Printer();
	}
}



/**
 * Description:
 * <br/>網站: <a href="https://www.crazyit.org">瘋狂Java聯盟</a> 
 * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
public class BetterPrinterFactory
	implements OutputFactory
{
	public Output getOutput()
	{
		//該工廠隻負責產生BetterPrinter對象
		return new BetterPrinter();
	}
}



/**
 * Description:
 * <br/>網站: <a href="https://www.crazyit.org">瘋狂Java聯盟</a> 
 * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
 * <br/>This program is protected by copyright laws.
 * <br/>Program Name:
 * <br/>Date:
 * @author  Yeeku.H.Lee kongyeeku@163.com
 * @version  1.0
 */
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) 
	{
		//使用PrinterFactory子類來創建OutputFactory
		OutputFactory of = new BetterPrinterFactory();
		//將Output對象傳入,創建Computer對象
		Computer c = new Computer(of.getOutput());
		c.keyIn("輕量級Java EE企業應用實戰");
		c.keyIn("瘋狂Java講義");
		c.print();
	}
}


最後更新:2017-04-04 07:03:36

  上一篇:go 【設計模式】【工廠方法根據type參數升級為抽象工廠】
  下一篇:go iOS搴旂敤寮€鍙戝靉闂ㄦ寚鍗?- 緙栧啓 Objective-C 浠g爜-鍗氬-浜戞爾紺懼尯-闃塊噷浜?