美文网首页程序员
设计模式之——单例模式

设计模式之——单例模式

作者: turbo_chen09 | 来源:发表于2019-01-18 11:08 被阅读0次

    为什么使用单例模式?

    创建一个对象,只需实例化一次,就可以在项目内部任何位置使用。

    如何创建单例模式?

      私有化构造函数 private function __construct(){}。

    上述代码功能:限制用户手动实例化,阻止 new className()  产生实例 。


    static private $instance;

    static function getInstance(){

          if(!self::$instance){

                self::$instance = new className();

            }

            return self::$instance;

    上述代码功能:className::getInstance() 创建一个唯一实例。之前限制了 new className()方法,所以要创建一个静态方法,从内部实例化。

    private function __clone(){}

    上述代码功能: 将克隆方法私有化,防止用户克隆对象。

    接下来上完整代码:

    class lesson

    {

        private $name;//私有属性,用于测试

        static private $instance;//用户绑定一个实例

        private function __construct(){} //阻止 new lesson()

        private function __clone(){}   //阻止 克隆方法

        //产生唯一实例

        static public function getInstance()

    {

            if (!self::$instance) {

                self::$instance = new lesson();

            }

            return self::$instance;

        }

        public function setName($name){

            $this->name = $name;

        }

        public function getName(){

            echo $this->name;

        }

    }

    $a = lesson::getInstance();//创建一个实例

    $a->setName('简书');//对实例的属性赋值

    unset($a);//删除这个实例

    $b = lesson::getInstance();//创建新实例

    $b->getName(); //输出结果: 简书

    说明实例只被实例化一次,并保存了第一次赋值的结果。

    相关文章

      网友评论

        本文标题:设计模式之——单例模式

        本文链接:https://www.haomeiwen.com/subject/snbgdqtx.html