<?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();
PHP設計模式之-----高級工廠模式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.