【读书笔记-重构与模式】 单例模式
2012-07-10 11:57
274 查看
《深入php面向对象,模式与实践》中指出:全局变量是面向对象程序员遇到的引发bug的主要原因之一,这是因为全局变量将类捆绑在特定的环境中,破坏了封装。然而,为了能够使所有类够能够访问到某个对象,会不惜忍受全局访问的缺陷。
总结来说,不使用全局变量,又想要使得每个类都能访问到对象。问题的关键点即:
1.对象应该被系统中的任何对象使用。
2.对象不应该被存储在会被复写的全局变量中。
3.系统中不应该出现超过一个的该变量。
为了解决这个方案,可以使用单例模式。
单例模式的实现思想是:将类的构造函数设置为private权限,同时采用一个静态方法和静态属性来间接实例化对象。
单例模式的UML图示如下:
总结来说,不使用全局变量,又想要使得每个类都能访问到对象。问题的关键点即:
1.对象应该被系统中的任何对象使用。
2.对象不应该被存储在会被复写的全局变量中。
3.系统中不应该出现超过一个的该变量。
为了解决这个方案,可以使用单例模式。
单例模式的实现思想是:将类的构造函数设置为private权限,同时采用一个静态方法和静态属性来间接实例化对象。
class singleton{ private static $instance = NULL; private $props = array(); private function __construct(){ } public static function getInstance(){ if(empty(SELF::$instance)){ SELF::$instance = new SELF(); } return self::$instance; } public function setProp($prop,$value){ $this->props[$prop] = $value; } public function getProp($prop){ return $this->props[$prop]; } private function __set($prop,$value){ //省略之 } private function __get(){ //省略 } private function __clone(){ //省略 } }
单例模式的UML图示如下:
相关文章推荐
- 【读书笔记-重构与模式】 代码坏味~
- 【读书笔记-重构与模式】 策略模式Strategy--封装变化
- 敏捷软件开发原则,模式与实践(c#)读书笔记(1)-重构
- 【读书笔记-重构与模式】设计模式之简单工厂模式、工厂模式、抽象工厂
- 【读书笔记-重构与模式】 设计模式简介
- 【读书笔记-重构与模式】 Facade外观模式-为系统提供统一简单接口
- 【读书笔记-重构与模式】 抽象工厂与单例模式的组合使用
- 【读书笔记-重构与模式】 观察者模式--将客户元素从主体中分离
- 【读书笔记-重构与模式】 组合模式-让面向对象更加灵活
- 重构与模式(Refactoring to Patterns)-读书笔记
- 《HeadFirst设计模式》读书笔记-第1章-策略模式
- 《敏捷软件开发:原则、模式与实践》 前三章读书笔记 -- 实践
- (Portal开发读书笔记)Portlet 模式
- 重构 - 读书笔记
- android源码设计模式解析与实战 读书笔记 2 单例模式(上)
- 重构读书笔记
- 《面向模式的软件体系结构1--模式系统》读书笔记(1)--- 适应性系统和微核模式
- 【读书笔记】-【编程语言的实现模式】-【LL(1)递归下降的词法解析器】
- Activity的生命周期和启动模式—-读书笔记
- CLR via C# 读书笔记 3-4 锁-条件变量模式