设计模式常用语:

  1. 关联:一个类中需要引用到其它类。
  2. 聚合:弱拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。
  3. 组合:强拥有关系,体现了严格的部分和整体的关系,生命周期是一样的。也有称为合成。


工厂模式:用特定的类来处理实例化。核心思想是用多态来替换条件判断。以下代码是按照《大话设计模式》来写的。由于本人水平低,又不懂C#,不足之处还望老鸟之处。

 

 


  1. <?php 
  2. abstract class Operation{ 
  3.     abstract function GetResult($a,$b); 
  4. class OperationAdd extends Operation{ 
  5.     function GetResult($a,$b){ 
  6.         return $a+$b
  7.     } 
  8. class OperationSub extends Operation{ 
  9.     function GetResult($a,$b){ 
  10.         return $a-$b
  11.     } 
  12. class OperationMul extends Operation{ 
  13.     function GetResult($a,$b){ 
  14.         return $a*$b
  15.     } 
  16. class OperationDiv extends Operation{ 
  17.     function GetResult($a,$b){ 
  18.         if($b==0){ 
  19.             die("除数不能为0"); 
  20.         } 
  21.         return $a/$b
  22.     } 
  23. class OperationFactor{ 
  24.     static function createOperate($operate){ 
  25.         switch($operate){ 
  26.             case "+"
  27.                 $oper=new OperationAdd(); 
  28.                 break
  29.             case "-"
  30.                 $oper=new OperationSub(); 
  31.                 break
  32.             case "*"
  33.                 $oper=new OperationMul(); 
  34.                 break
  35.             case "/"
  36.                 $oper=new OperationDiv(); 
  37.                 break
  38.         } 
  39.         return $oper
  40.     } 
  41.  
  42. $oper=OperationFactor::createOperate('+'); 
  43. echo $oper->GetResult(3,4); 


 

《深入PHP面向对象...》一书中

PHP设计模式(1)-工厂模式_PHP 工厂模式

工厂类也需要多个。

工厂模式的不足:1.代码重复;2.可能会带来不必要的子类化。

 

抽象工厂模式:用工厂类来产生一组相关的类。

 

工厂方法模式与抽象工厂模式的区别(摘自百度问答):

 

 

工厂方法模式:

一个抽象产品类,可以派生出多个具体产品类。   

一个抽象工厂类,可以派生出多个具体工厂类。(可能没有抽象工厂类)   

每个具体工厂类只能创建一个具体产品类的实例。

 

抽象工厂模式:

多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。   

一个抽象工厂类,可以派生出多个具体工厂类。   

每个具体工厂类可以创建多个具体产品类的实例。   

    

区别:

工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。   

工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。