<?php
class PizzaA {
public function __construct () {
print_r('create PizzaA instance');
}
public function cook () {
print_r('cooking pizza!');
}
public function box () {
print_r('boxing pizza!');
}
}
<?php
class PizzaB {
public function __construct () {
print_r('create PizzaB instance');
}
public function cook () {
print_r('cooking pizza!');
}
public function box () {
print_r('boxing pizza!');
}
}
<?php
class PizzaStore {
public function __construct (SimplePizzaFactory $pizzaFactory) {
$this->factory = $pizzaFactory;
}
public function orderPizza ($type) {
$pizza = $this->factory->createPizza($type);
$pizza->cook();
$pizza->box();
}
}
<?php
require 'PizzaA.php';
require 'PizzaB.php';
class SimplePizzaFactory {
public function createPizza ($type) {
$pizza = '';
if ($type == 'PizzaA') {
$pizza = new PizzaA();
} elseif ($type == 'PizzaB') {
$pizza = new PizzaB();
}
return $pizza;
}
}
<?php
require 'PizzaStore.php';
require 'SimplePizzaFactory.php';
$factory = new SimplePizzaFactory();
$p_store = new PizzaStore($factory);
$p_store->orderPizza('PizzaA');
说明: 抽象一个披萨工厂的类 专门用来处理生产各种披萨 生产完毕 送到披萨商店 当然这个时候披萨商店要拿到披萨的实例,然后执行披萨自己的一系列操作
工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到子类