php中的工厂方法,PHP 工厂方法模式

1. PHP 工厂方法模式

/**

* 工厂方法模式

* 实现

* 通过一个抽象的核心工厂类指定方法.

* 具体工厂类实现抽象工厂类方法.

* 创建一个商品接口

* 商品具体类实现接口

*/

/**

* 定义商品接口

* Interface GoodsIO

*/

interface GoodsIO {

public function GoodsName ();

public function GoodsPrice ();

}

/**

* Class MacBook

* 具体商品类

* 集成GoodsIO接口并实现

*/

class MacBook implements GoodsIO {

public function GoodsName()

{

echo 'MacBook';

// TODO: Implement GoodsName() method.

}

public function GoodsPrice()

{

echo 'Price: 8888Rmb';

// TODO: Implement GoodsPrice() method.

}

}

/**

* Class Xps

* 具体商品类

* 集成GoodsIO接口并实现

*/

class Xps implements GoodsIO {

public function GoodsName()

{

echo'New Xps13';

// TODO: Implement GoodsName() method.

}

public function GoodsPrice()

{

echo 'Price: 69000Rmb';

// TODO: Implement GoodsPrice() method.

}

}

/**

* Class AFactory

* 定义一个抽象工厂

*/

abstract class AFactory {

abstract static function GetGoods();

public function AFError ($message) {

throw new Exception($message);

}

}

/**

* Class MacBookFactory

* 具体工厂集成抽象工厂 继承(AFactory)

* 抽象工厂的具体实现

*/

class MacBookFactory extends AFactory {

static function GetGoods()

{

return new MacBook();

// TODO: Implement GetGoods() method.

}

}

/**

* Class XpsFactory

* 具体工厂集成抽象工厂 继承(AFactory)

* 抽象工厂的具体实现

*/

class XpsFactory extends AFactory {

static function GetGoods()

{

return new Xps();

// TODO: Implement GetGoods() method.

}

// 使用抽象父类实现过的异常方法

public function XpsAFErr ($message) {

parent::AFError($message);

}

}

$xpsfa = new XpsFactory();

try {

$xpsfa->XpsAFErr('absError');

} catch (\Exception $e) {

// 使用抽象父类实现过的异常方法

echo $e->getMessage().PHP_EOL; // echo absError

}

// 使用工厂类

$xps = XpsFactory::GetGoods();

echo $xps->GoodsName().PHP_EOL.$xps->GoodsPrice();

// echo New Xps13Price: 69000Rmb

$mac = MacBookFactory::GetGoods();

echo $mac->GoodsName().PHP_EOL.$mac->GoodsPrice();

// echo MacBookPrice: 8888Rmb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值