PHP 设计模式总结

  回想了一下php的设计模式,好像记得不完全了。此处对php设计模式重新做一下复习总结。

  单例模式:核心只包括一个特殊的类,保证系统中只能有一个实例,即一个类中只能有一个实例化对象,避免系统中有大量的new操作。

  单例模式创建有四个要点:

  1、私有化的静态属性(用于保存建立的类的实例对象),

  2、私有化 的构造方法(防止从外部new生成对象),

  3、私有化的克隆方法(防止外部重过clone(克隆)方法生成对象),  

  4、公有化的静态方法(调用当前单例类的一个入户。)

<?php
header("Content-type:text/html;charset=utf-8");
class danli{
    static private $obj;  //私有化的静态属性,保存实例对象

    private function __construct(){  //私有化的构造方法
        //echo "Is New() Ok";
    }

    private function __clone(){}  //私有的克隆方法

    static public function getInstanceEntry(){  //公有化的静态方法,外部实例对象的入口
        
        if(!self::$obj instanceof self){   //instanceof判断对象是否实例化
            self::$obj = new self();  //或者是new danli()
        }
        return self::$obj;
    }

    public function getName($nn){
        return $nn;
    }
}


$t = danli::getInstanceEntry();
echo $t -> getName('ABC');
?>

  工厂模式:就是一个类,在这个类中是一些创建对象的方法,这样我们就可以使用工厂类去创建对象而不是直接使用new,如果要修改对象类型,直接在工厂类中修改即可。

//工厂模式
class gongchang{
    static public function fact($n){
        if($n == 1) return new A();
        elseif ($n == 2) return new B();
        elseif ($n == 'c') return new C();
        return new de();
    }
}
Interface InstanceEntry{  
    public function getname();
}

class A implements InstanceEntry{
    private $n = "AAAAAAAA";
    public function getname(){return $this->n;}
}
class B implements InstanceEntry{
    private $n = "BBBBBBB";
    public function getname(){return $this->n;}
}
class C implements InstanceEntry{
    private $n = "CCCCCCCC";
    public function getname(){return $this->n;}
}
class de implements InstanceEntry{
    private $n = "morenjieguo";
    public function getname(){return $this->n;}
}



$test = gongchang::fact(2);
echo $test->getname();
?>

猜你喜欢

转载自www.cnblogs.com/lovele-/p/9233451.html