<?php
abstract class CakeStore
{
public function orderCake()
{
$cake = $this->createCake();
$cake->bake();
$cake->package();
}
abstract function createCake();
}
abstract class Cake
{
abstract public function bake();
abstract public function package();
}
class BeiJingCake extends Cake
{
public function bake()
{
echo "BeiJing cake is baking<br>\n";
}
public function package()
{
echo "BeiJing cake is packaging<br>\n";
}
}
class ShangHaiCake extends Cake
{
public function bake()
{
echo "Shang Hai cake is baking<br>\n";
}
public function package()
{
echo "Shang Hai cake is packaging<br>\n";
}
}
class BeiJingCakeStore extends CakeStore
{
public function createCake()
{
return new BeiJingCake();
}
}
class ShangHaiCakeStore extends CakeStore
{
public function createCake()
{
return new ShangHaiCake();
}
}
class Test
{
public function run()
{
$beijingStore = new BeiJingCakeStore();
$shanghaiStore = new ShangHaiCakeStore();
$beijingStore->orderCake();
$shanghaiStore->orderCake();
}
}
$test = new Test();
$test->run();