PHP设计模式之单例模式入门与应用详解
本文实例讲述了PHP设计模式之单例模式入门与应用。分享给大家供大家参考,具体如下
单例模式,是一种常用的软件设计模式,在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例,即一个类只有一个对象实例。通俗来讲就是通过提供自身共享实例的访问,单例设计模式用于限制特定对象只能被创建一次,来看下这个单例模式的要点
1.一个类只能有一个对象;
2.必须是自行创建这个类的对象;
3,要想整个系统提供这一个对象;
从具体实现的角度来说,可以按着狼蚁网站SEO优化这三点来理解
一是单例模式的类只提供私有的构造函数,
二是类定义中含有一个该类的静态私有对象,
三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。
最主要的就是还要有一个private的clone方法,防止克隆,得记得哈。
优点如下
一、实例控制
单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。
二、灵活性
因为类控制了实例化过程,所以类可以灵活更改实例化过程。
缺点如下
一、开销
虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。
二、可能的开发混淆
使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,应用程序开发人员可能会意外发现自己无法直接实例化此类。
三、对象生存期
不能解决删除单个对象的问题。在提供内存管理的语言中(例如基于.NET Framework的语言),只有单例类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中(如 C++),其他类可以删除对象实例,但这样会导致单例类中出现悬浮引用。
来看下咱写的案例
class Test{ static private $instance; private $age; private $name; private function __construct($name,$age) { $this->name = $name; $this->age = $age; echo "construct".PHP_EOL; } private function __clone() { // TODO: Implement __clone() method. } static public function set_name($name,$age) { if (!self::$instance instanceof self) { self::$instance = new self($name,$age); } return self::$instance; } public function get_name() { echo $this -> name.PHP_EOL; echo $this -> age.PHP_EOL; } } $object_1 = Test::set_name("cuijinpeng","26"); $object_1->get_name(); echo "<br>"; $object_2 = Test::set_name("luyaran","27"); $object_2->get_name();
运行结果
construct cuijinpeng 26
cuijinpeng 26
从上述实例中,我们可以看出,$object_1创建对象后,参数是"cuijinpeng","26",$object_2并没有创建对象,而是直接使用$instance保存的唯一对象,所以输出的参数并没有变为"luyaran","27"。
好啦,本次记录就到这里了。
更多关于PHP相关内容感兴趣的读者可查看本站专题《》、《》、《》、《》、《》、《》及《》
希望本文所述对大家PHP程序设计有所帮助。
编程语言
- 宿迁百度关键词排名指南:实现精准营销的关键
- 四川SEO优化怎么做网络推广
- 立昂技术备案老域名收购:如何为您的业务赋能
- 安徽百度关键词seo贵不贵,一般需要多少钱
- 吉林百度快照排名怎么做电话营销
- 多伦新手做SEO怎么做
- 甘肃优化关键词排名推广怎么做论坛营销
- 沙雅SEO网站推广:提升您的在线可见性
- 四川SEO优化如何提升销售额和销售量
- 聂荣网站排名优化:提升网站可见性的全方位指
- 涞水SEO:提升地方企业在线可见性的策略
- 辽宁百度seo排名怎样做网站排名
- 临湘哪有关键词排名优化:提升网站可见度的关
- 黑龙江百度网站优化有没有优惠
- 凉城优化关键词排名推广:提升您的网络可见性
- 萝北整站优化:提升您网站流量和排名的全面指