工厂模式:根据用户的需求,动态生成类的实例,而不直接使用new来生成实例

原创 2018-12-14 23:04:17 276
摘要:工厂模式:根据用户的需求,动态生成类的实例,而不直接使用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>';


发布手记

热门词条