<?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();