摘要:工厂模式:根据用户的需求,动态生成类的实例,而不直接使用new来生成实例。这样如果想更改创建的对象类型,只需更改该工厂类即可。class OrangeDrink{ public function getDrink() { &n
工厂模式:根据用户的需求,动态生成类的实例,而不直接使用new来生成实例。这样如果想更改创建的对象类型,只需更改该工厂类即可。
class OrangeDrink{
public function getDrink()
{
echo '来一杯桔子饮料';
}
}
class AppleDrink{
public function getDrink()
{
echo '来一杯苹果饮料';
}
}
//顾客1
echo '顾客1<br>';
$orange = new OrangeDrink();
echo $orange->getDrink();
echo '<br>';
$apple = new AppleDrink();
echo $apple->getDrink();
echo '<br>';
//顾客2
echo '顾客2<br>';
$orange2 = new OrangeDrink();
echo $orange2->getDrink();
echo '<br>';
$apple2 = new AppleDrink();
echo $apple2->getDrink();
echo '<br>';
echo '<hr>';
//以上代码顾客和饮料是高耦合关系
//创建一个工厂类把上面的代码进行改造,以降低耦合度
class Factory
{
public static function creat($classname)
{
switch(strtolower($classname)){
case 'orangedrink':
return new OrangeDrink();
break;
case 'appledrink':
return new AppleDrink();
break;
}
}
}
//顾客1
echo '顾客1<br>';
$orange = Factory::creat('OrangeDrink');
echo $orange->getDrink();
echo '<br>';
$apple = Factory::creat('AppleDrink');
echo $apple->getDrink();
echo '<br>';
//顾客2
echo '顾客2<br>';
$orange2 = Factory::creat('OrangeDrink');
echo $orange2->getDrink();
echo '<br>';
$apple2 = Factory::creat('AppleDrink');
echo $apple2->getDrink();
echo '<br>';