5. インスタンスを生成する
class Factory {
public function create($type) {
switch ($type) {
case 'foo':
return new FooProduct;
case 'bar':
return new BarProduct;
default:
throw new LogicException;
}
}
}
10. インスタンス生成を上書き可能にする
class ParentClass {
public function save() {
return $this->storage()->store();
}
protected function storage() {
return new Storage;
}
}
class ChildClass {
protected function storage() {
return new WebStorage;
}
}
15. Factoryも抽象化する
abstract class AbstractFactory {
abstract public function create();
}
class Factory extends AbstractFactory {
public function create() {
return new WebStorage;
}
}
class Factory2 extends AbstractFactory {
public function create() {
return new FileStorage;
}
}