Jadual Kandungan
1.1 工厂模式,工厂方法或者类生成对象,而不是在代码直接new
1.2 单例模式,使某个类的对象仅运行创建一个
1.3 注册模式,全局共享和交换对象
2.总结使用
Rumah pembangunan bahagian belakang tutorial php php 3种基本设计模式的组合使用

php 3种基本设计模式的组合使用

Jun 23, 2016 pm 01:31 PM

1.1 工厂模式,工厂方法或者类生成对象,而不是在代码直接new

    class Factory{              static function getDatabase(){            return new Mysql($host, $user, $pass);        }    }    #使用    Factory::getDatabase();
Salin selepas log masuk

1.2 单例模式,使某个类的对象仅运行创建一个

  • 1.有个私有的静态对象变量,专门存放本类的对象
  • 2.有个静态的方法来创建对象
  • 3.有个私有的构造函数,防止外部new对象
  • 4.有个clone方法,防止clone return false
    参考文章单例模式
  • class Database {      //单一对象属性     private static $instance;      //定义一些全局变量需要存放属性     private $props = array();      //私有的构造方法     private function __construct(){          echo 'into construct! 该类不允许外部创建对象 ';      }      //返回单一实例     public static function getInstance () {          //判断是否已经有了实例化的对象         if(empty(self::$instance)) {              //可以被override (动态解析)             self::$instance = new static();              //不可以被override (静态解析)             //self::$instance = new self();         }          return self::$instance;      }      public function __clone(){        return '该类禁止clone';    }    //设置属性     public function setProperty ( $key, $value) {          $this->props[$key] = $value;      }      //获取属性     public function getPeoperty ( $key ) {          return $this->props[$key];      }  }  //使用 $dbObj = Database::getInstance();  $dbObj->setProperty('root_path','/www');  $dbObj->setProperty('tmp_path','/tmp');  //接下来删除该单例对象,如果还能获取到刚刚添加的属性,说明使用的是同一个对象 unset($dbObj);  $dbObj = Database::getInstance();  echo $dbObj->getPeoperty('root_path');  echo $dbObj->getPeoperty('tmp_path');  
    Salin selepas log masuk

    1.3 注册模式,全局共享和交换对象

  • 1.将同一个需要多次使用对象统一注册添加别名,统一调用使用, (比如客户买一个机器肯定是去工厂认定的机构去买,而不是每个人都去工厂去买)
  • 2.当下一次想使用一个对象的时候,不需要使用工厂,也不需要使用单例模式,直接在注册器上获取就可以了
  •     class Register (){        protected static $objects;        function set($alias, $object){            self::$objects[$alias] = $objects;        }        function get($alias){            return self::$objects[$alias];        }        function _unset($alias){            unset(self::$objects[$alias]);        }    }
    Salin selepas log masuk

    2.总结使用

        class Factory{              static function getDatabase(){            //单例模式获取数据对象            $dbObj = Database::getInstance();            //注册到全局树上            Register::set('db1', $dbObj);        }    }    #使用    //第一次主文件里面    Factory::getDatabase();    //以后使用数据库对象直接访问    Register::get('db1');
    Salin selepas log masuk

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

    Tag artikel panas

    Notepad++7.3.1

    Notepad++7.3.1

    Editor kod yang mudah digunakan dan percuma

    SublimeText3 versi Cina

    SublimeText3 versi Cina

    Versi Cina, sangat mudah digunakan

    Hantar Studio 13.0.1

    Hantar Studio 13.0.1

    Persekitaran pembangunan bersepadu PHP yang berkuasa

    Dreamweaver CS6

    Dreamweaver CS6

    Alat pembangunan web visual

    SublimeText3 versi Mac

    SublimeText3 versi Mac

    Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

    11 skrip pemendek URL terbaik PHP (percuma dan premium) 11 skrip pemendek URL terbaik PHP (percuma dan premium) Mar 03, 2025 am 10:49 AM

    11 skrip pemendek URL terbaik PHP (percuma dan premium)

    Pengenalan kepada API Instagram Pengenalan kepada API Instagram Mar 02, 2025 am 09:32 AM

    Pengenalan kepada API Instagram

    Bekerja dengan Data Sesi Flash di Laravel Bekerja dengan Data Sesi Flash di Laravel Mar 12, 2025 pm 05:08 PM

    Bekerja dengan Data Sesi Flash di Laravel

    Respons HTTP yang dipermudahkan dalam ujian Laravel Respons HTTP yang dipermudahkan dalam ujian Laravel Mar 12, 2025 pm 05:09 PM

    Respons HTTP yang dipermudahkan dalam ujian Laravel

    Curl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API REST Curl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API REST Mar 14, 2025 am 11:42 AM

    Curl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API REST

    Bina aplikasi React dengan hujung belakang Laravel: Bahagian 2, React Bina aplikasi React dengan hujung belakang Laravel: Bahagian 2, React Mar 04, 2025 am 09:33 AM

    Bina aplikasi React dengan hujung belakang Laravel: Bahagian 2, React

    12 skrip sembang php terbaik di codecanyon 12 skrip sembang php terbaik di codecanyon Mar 13, 2025 pm 12:08 PM

    12 skrip sembang php terbaik di codecanyon

    Pemberitahuan di Laravel Pemberitahuan di Laravel Mar 04, 2025 am 09:22 AM

    Pemberitahuan di Laravel

    See all articles