PHP设计模式之基础设计模式

学习设计模式,并应用到实际工作中,

PHP设计模式之基础设计模式
一、工厂模式

属于类创建型模式,在简单工厂模式中,可以根据参数的不同返回不同类的实例,简单工厂模式专门定义一个类来负责创建其他类的实例,

被创建的实例通常都具有共同的父类。

代码实例:

class Cat{
    function __construct(){
       echo "I am Cat class ";
    }
}
class Dog{
    function __construct(){
        echo "I am Dog class ";
    }
}

class Factory{
    public static function CreateObject($name){
        if ($name == 'cat') {
            return new Cat();
        }elseif ($name == 'dog') {
            return new Dog();
        }
    }
}
$cat = Factory::CreateObjectl('cat');
$dog = Factory::CreateObject('dog');

优点:实现对象的创建和对象使用的分离,将对象的创建交给专门的工厂类负责;一旦发生变更,只需要在工厂类里面修改即可,而不用一个一个的去修改。

缺点:工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,产品较多时。工厂方法代码非常复杂。

二、单例模式

是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,

这样有利于我们协调系统整体的行为。防止对象多次连接,造成资源浪费。

示例代码:

class DataBase{
    private static $instance;
    private function __construct(){}//私有构造方法 禁止使用new创建对象
    public static function getInstance(){
   if (!isset(self::$instance)) {
       self::$instance = new self;
   }
        return self::$instance;
    }
    private  function __clone(){}//将克隆方法设为私有,禁止克隆对象
    public function say(){
        echo "这是用单例模式创建对象实例 ";
    }
    public function operation(){
        echo "这里可以添加其他方法和操作 ";
    }
}
$db = DataBase::getInstance();
$db->say();
$db->operation();
三、注册器模式

已经创建好对象后,下次使用直接取,将一些对象注册到全局树上面,可以用来在任何地方被访问。一般只提供一个set 和 unset 两种方法,

需要一个静态的非公开属性和一个取得静态属性的静态方法.

实例代码:

class Register {//注册器模式
    protected static $object;
    public static function set($alias, $object){
        self::$object[$alias] = $object;
    }
    public static function get($alias){
        return self::$object[$alias];
    }
    public static function _unset($alias){
        unset(self::$object[$alias]);
    }
}
class Factory{//工厂模式
    public static function createObject(){
   $db = DataBase::getInstance();
   Register::set('db', $db);
    }
}
class DataBase{//单例模式
    protected static $instance;
    public static function getInstance(){
   if (!isset(self::$instance)) {
       self::$instance = new self;
   }
   return self::$instance;
    }
    public function say(){
        echo "这是用单例模式创建对象实例 ";
    }
}
$db = Factory::createObject();
$obj = Register::get('db');
$obj->say();
上一篇:JavaScript自定义滚动条 下一篇:PHP设计模式之适配、策略以及数据对象映射模式

评论

评论(0)

暂无评论