设计模式常用语:
- 关联:一个类中需要引用到其它类。
- 聚合:弱拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。
- 组合:强拥有关系,体现了严格的部分和整体的关系,生命周期是一样的。也有称为合成。
工厂模式:用特定的类来处理实例化。核心思想是用多态来替换条件判断。以下代码是按照《大话设计模式》来写的。由于本人水平低,又不懂C#,不足之处还望老鸟之处。
- <?php
- abstract class Operation{
- abstract function GetResult($a,$b);
- }
- class OperationAdd extends Operation{
- function GetResult($a,$b){
- return $a+$b;
- }
- }
- class OperationSub extends Operation{
- function GetResult($a,$b){
- return $a-$b;
- }
- }
- class OperationMul extends Operation{
- function GetResult($a,$b){
- return $a*$b;
- }
- }
- class OperationDiv extends Operation{
- function GetResult($a,$b){
- if($b==0){
- die("除数不能为0");
- }
- return $a/$b;
- }
- }
- class OperationFactor{
- static function createOperate($operate){
- switch($operate){
- case "+":
- $oper=new OperationAdd();
- break;
- case "-":
- $oper=new OperationSub();
- break;
- case "*":
- $oper=new OperationMul();
- break;
- case "/":
- $oper=new OperationDiv();
- break;
- }
- return $oper;
- }
- }
- $oper=OperationFactor::createOperate('+');
- echo $oper->GetResult(3,4);
《深入PHP面向对象...》一书中
工厂类也需要多个。
工厂模式的不足:1.代码重复;2.可能会带来不必要的子类化。
抽象工厂模式:用工厂类来产生一组相关的类。
工厂方法模式与抽象工厂模式的区别(摘自百度问答):
工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。(可能没有抽象工厂类)
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。