工厂模式(Factory)
介绍:
创建型模式,定义一个工厂类,在实例化类的时候,由调用类决定实例化哪个类,使其创建过程延迟到调用类进行。
何时使用:不同条件下创建不同的实例。
优点:
- 调用者只需要知道对象的名称就可以创建对象;
- 扩展性高,新增一个产品,只要扩展一个工厂类即可;
- 屏蔽具体实现,调用者只关心接口。
缺点:
新增产品需要增加一个实现类和修改工厂类,增加系统的复杂度。
代码实现:
<?php
interface Animal{
function call();
}
class Cat implements Animal{
function call(){
echo 'miao~~';
}
}
class Dog implements Animal{
function call(){
echo 'wang!';
}
}
class NullAnimal implements Animal{
function call(){
echo 'kaka~~';
}
}
class AnimalFactory {
function getCall($animalType = ''){
$animalType = strtoupper($animalType);
switch($animalType){
case 'CAT':
$call = new Cat();
break;
case 'DOG':
$call = new Dog();
break;
default :
$call = new NullAnimal();
break;
}
return $call;
}
}
$animalFactory = new AnimalFactory();
$animal1 = $animalFactory->getCall('cat');
$animal1->call();
echo '<br>';
$animal2 = $animalFactory->getCall('dog');
$animal2->call();
echo '<br>';
$animal3 = $animalFactory->getCall();
$animal3->call();
echo '<br>';
$animal4 = $animalFactory->getCall('bird');
$animal4->call();
exit;