php 抽象工厂类实例,PHP版抽象工厂模式

这个示例展示了如何运用抽象工厂模式来创建不同地方风格的比萨。通过定义比萨商店、比萨、原料工厂等抽象类,实现了纽约比萨店和芝加哥比萨店的比萨制作,每个地方的比萨在准备、烘烤、切割和装盒的过程中会使用对应地方特色的原料。
摘要由CSDN通过智能技术生成

/*

* 抽象工厂模式

* 提供一个接口,

* 用于创建相关或依赖对象的家族,

* 而不需要明确指定具体类。

*/

//定义比萨商店

abstract class PizzaStore{

public function orderPizza($type){

$Pizza = $this->createPizza($type);

$Pizza->prepare();

$Pizza->bake();

$Pizza->cut();

$Pizza->box();

return $Pizza;

}

abstract protected function createPizza($type);

}

//纽约比萨店

class NYPizzaStore extends PizzaStore{

public function createPizza($type){

$Pizza = null;

$PizzaIngredientFactory = new NYPizzaIngredientFactory();

if ('cheese' == $type) {

$Pizza = new CheesePizza($PizzaIngredientFactory);

}elseif ('clam' == $type){

$Pizza = new ClamPizza($PizzaIngredientFactory);

}

return $Pizza;

}

}

//芝加哥比萨店

class ChicagoPizzaStore extends PizzaStore{

public function createPizza($type){

$Pizza = null;

$PizzaIngredientFactory = new ChicagoPizzaIngredientFactory();

if ('cheese' == $type) {

$Pizza = new CheesePizza($PizzaIngredientFactory);

}elseif ('clam' == $type){

$Pizza = new ClamPizza($PizzaIngredientFactory);

}

return $Pizza;

}

}

//原料工厂接口

interface PizzaIngredientFactory{

public function createDough();

public function createSauce();

public function createCheese();

public function createVeggies();

public function createPepperoni();

public function createClam();

}

//纽约原料工厂

class NYPizzaIngredientFactory implements PizzaIngredientFactory{

public function createDough(){

echo 'NY createDough
';

}

public function createSauce(){

echo 'NY createSauce
';

}

public function createCheese(){

echo 'NY createCheese
';

}

public function createVeggies(){

echo 'NY createVeggies
';

}

public function createPepperoni(){

echo 'NY createPepperoni
';

}

public function createClam(){

echo 'NY createClam
';

}

}

//芝加哥原料工厂

class ChicagoPizzaIngredientFactory implements PizzaIngredientFactory{

public function createDough(){

echo 'Chicago createDough
';

}

public function createSauce(){

echo 'Chicago createSauce
';

}

public function createCheese(){

echo 'Chicago createCheese
';

}

public function createVeggies(){

echo 'Chicago createVeggies
';

}

public function createPepperoni(){

echo 'Chicago createPepperoni
';

}

public function createClam(){

echo 'Chicago createClam
';

}

}

//比萨类

abstract class Pizza{

abstract public function prepare();

public function bake(){

echo 'bake
';

}

public function cut(){

echo 'cut
';

}

public function box(){

echo 'box
';

}

}

//比萨1

class CheesePizza extends Pizza{

public $PizzaIngredientFactory;

public function __construct($PizzaIngredientFactory){

$this->PizzaIngredientFactory = $PizzaIngredientFactory;

}

//向原料工厂请求原料

public function prepare(){

$this->PizzaIngredientFactory->createDough();

$this->PizzaIngredientFactory->createSauce();

$this->PizzaIngredientFactory->createCheese();

}

}

//比萨2

class ClamPizza extends Pizza{

public $PizzaIngredientFactory;

public function __construct($PizzaIngredientFactory){

$this->PizzaIngredientFactory = $PizzaIngredientFactory;

}

//向原料工厂请求原料

public function prepare(){

$this->PizzaIngredientFactory->createDough();

$this->PizzaIngredientFactory->createSauce();

$this->PizzaIngredientFactory->createCheese();

$this->PizzaIngredientFactory->createClam();

}

}

$NYPizzaStore = new NYPizzaStore();

$ChicagoPizzaStore = new ChicagoPizzaStore();

$NYPizzaStore->orderPizza('cheese');

$ChicagoPizzaStore->orderPizza('clam');

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值