PHP設計模式之-----高級工廠模式

<?php
/*
 * PHP設計模式 工廠模式 (創建型)
 * 一個工廠製造多種商品
 * */

/**
 * Interface Product 定義一個獲取製造出來的產品的接口
 */
interface Product
{
	public function getProperties();
}

/**
 * Class Creator
 *
 * @describe 定義一個創造產品的抽象類
 *
 * @author   nick
 *
 */
abstract class Creator
{
	// 接受所有實現Product接口的類
	protected abstract function factoryMethod( Product $product );

	public function doFactory( $productNow )
	{
		$countryProduct = $productNow; // 不同產品類的實例
		$mfg            = $this->factoryMethod($countryProduct);
		return $mfg;
	}
}

/**
 * Class countryFactory
 *
 * @describe 具體的創建產品的工廠類
 *
 * @author   nick
 *
 */
class CountryFactory extends Creator
{
	private $country;
	// 需要傳入要製造的產品的實例
	protected function factoryMethod( Product $product )
	{
		$this->country = $product;
		// 返回製造出來是具體產品
		return $this->country->getProperties();
	}
}

/**
 * Class SomeProduct
 *
 * @describe SomeProduct產品類
 *
 * @author   nick
 *
 */
class SomeProduct implements Product
{
	// 實現一些製造產品的邏輯
	private $mfgProduct;

	public function getProperties()
	{
		$this->mfgProduct = '我是SomeProduct產品' . '<br>';

		return $this->mfgProduct;
	}

}

/**
 * Class TextProduct
 *
 * @describe TextProduct產品類
 *
 * @author   nick
 *
 */
class TextProduct implements Product
{
	// 實現一些製造產品的邏輯
	private $mfgProduct;

	public function getProperties()
	{
		$this->mfgProduct = '我是TextProduct產品' . '<br>';

		return $this->mfgProduct;
	}

}

/**
 * Class Client
 *
 * @describe 最後用戶要那個產品就給那個產品
 *
 * @author   nick
 *
 */
class Client
{
	private $countryFactory;

	public function __construct()
	{
		$this->countryFactory = new CountryFactory();
		echo $this->countryFactory->doFactory(new TextProduct());
	}
}

$a = new Client();




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章