美文网首页PHP程序员PHP经验分享
设计模式——单例模式

设计模式——单例模式

作者: 夜航星osmo | 来源:发表于2018-01-17 16:23 被阅读39次

单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

适用性:

① 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时;

② 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

例子:

class User

{

    private $name;//声明一个私有的实例变量

    static private $_instance = null;

    final private function __construct(){//声明私有构造方法,防止外界实例化对象,使用final关键,防止继承后修改访问权限

    }

    final private function __clone(){//私有克隆方法,防止外部克隆对象,使用final关键,防止继承后修改访问权限

    }

    //静态方法,单例统一访问入口

    static public function getInterface()

    {

        if(self::$_instance instanceof self)

        {

            return self::$_instance;

        }

        self::$_instance = new self();

        return self::$_instance;

    }

    public function setName($n)

    {

        $this->name =$n;

    }

    public function getName()

    {

        return $this->name;

    }

}

$na = User::getInterface();

$nb = User::getInterface();

$na->setName('张三');

echo $nb->getName();//张三

$nb->setName('李四');

echo $nb->getName();//李四

所有的单例模式至少拥有以下三种公共元素

1、它们必须拥有一个构造函数,并且必须被标记为private;

2、它们拥有一个保存类的实例的静态成员变量;

3、它们拥有一个访问这个实例的公共的静态方法。

单例类不能在其它类中直接实例化,只能被其自身实例化。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。

单例模式的优点

1、改进系统的设计;

2、是对全局变量的一种改进。

缺点

1、难于调试;

2、隐藏的依赖关系;

3、无法用错误类型的数据覆写一个单例。

...

小结:

1、单例模式是只有一个对象实例的设计模式,所以不能被实例化(实例化时会自动调用构造函数)多次。通过private或protected来设置访问权限。

2、由于设置访问权限,无法通过new方法来实例化对象,只能通过内部实例化来创建对象实例,所以在入口方法使用static将入口方法设置为静态方法。

相关文章

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • python中OOP的单例

    目录 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 单例

    目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 设计模式 - 单例模式

    设计模式 - 单例模式 什么是单例模式 单例模式属于创建型模式,是设计模式中比较简单的模式。在单例模式中,单一的类...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • python 单例

    仅用学习参考 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计...

  • 基础设计模式:单例模式+工厂模式+注册树模式

    基础设计模式:单例模式+工厂模式+注册树模式 单例模式: 通过提供自身共享实例的访问,单例设计模式用于限制特定对象...

  • 单例模式

    JAVA设计模式之单例模式 十种常用的设计模式 概念: java中单例模式是一种常见的设计模式,单例模式的写法...

  • 设计模式之单例模式

    单例设计模式全解析 在学习设计模式时,单例设计模式应该是学习的第一个设计模式,单例设计模式也是“公认”最简单的设计...

网友评论

  • 3201b581a31f:【1、它们必须拥有一个构造函数,并且必须被标记为private】,这个如何理解?
    夜航星osmo:@_不息 设置一下更完整嘛
    3201b581a31f:@Aeggainety 实现单例的时候,构造函数是否需要设为private没有什么影响吧
    夜航星osmo:您好,您提的问题我经过整理已经写入本文小结,希望对您有所帮助。

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

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