<?php
class ChinaPizzaA {
public function __construct () {
print_r('create ChinaPizzaA instance');
}
public function cook () {
print_r('cooking ChinaA pizza!');
}
public function box () {
print_r('boxing ChinaA pizza!');
}
}
<?php
class ChinaPizzaB {
public function __construct () {
print_r('create CHinaPizzaB instance');
}
public function cook () {
print_r('cooking ChinaB pizza!');
}
public function box () {
print_r('boxing ChinaB pizza!');
}
}
<?php
class UsPizzaA {
public function __construct () {
print_r('create UsPizzaA instance');
}
public function cook () {
print_r('cooking Uspizza!');
}
public function box () {
print_r('boxing Uspizza!');
}
}
<?php
class UsPizzaB {
public function __construct () {
print_r('create UsPizzaB instance');
}
public function cook () {
print_r('cooking UspizzaB!');
}
public function box () {
print_r('boxing UspizzaB!');
}
}
<?php
require 'ChinaPizzaA.php';
require 'ChinaPizzaB.php';
require_once 'PizzaStore.php';
class ChinaPizzaStore extends PizzaStore {
public function createPizza ($type) {
$pizza = '';
if ($type == 'PizzaA') {
$pizza = new ChinaPizzaA();
} elseif ($type == 'PizzaB') {
$pizza = new ChinaPizzaB();
}
return $pizza;
}
}
<?php
require 'UsPizzaA.php';
require 'UsPizzaB.php';
require_once 'PizzaStore.php';
class UsPizzaStore extends PizzaStore {
public function createPizza ($type) {
$pizza = '';
if ($type == 'PizzaA') {
$pizza = new UsPizzaA();
} elseif ($type == 'PizzaB') {
$pizza = new UsPizzaB();
}
return $pizza;
}
}
<?php
abstract class PizzaStore {
public function orderPizza ($type) {
$pizza = $this->createPizza($type);
$pizza->cook();
$pizza->box();
return $pizza;
}
protected abstract function createPizza ($type) ;
}
<?php
require 'ChinaPizzaStore.php';
require 'UsPizzaStore.php';
$p_store = new ChinaPizzaStore();
$p_store->orderPizza('PizzaA');
$p_store = new UsPizzaStore();
$p_store->orderPizza('PizzaA');
说明: 采用抽象方法createPizza 让子类的商店去继承 强制让他实现这个方法 从而保持框架低耦合性 可控