只包含一个被称为单例类的特殊类。通过单例模式保证系统中,某个类的对象只存在一个。
优点:
1 提供对唯一实例的受控访问。
2 节省内存,系统内存中只存在一个该类的实例。
3 防止产生逻辑错误,比如产生序列号,两个实例可能会产生两个相同序列号。
4 允许可变个数的实例。
缺点:
1 时间开销:每次请求引用检查是否存在类的实例,仍需要时间开销,通过静态初始化解决。
2 开发混淆:开发人员需要记住使单例类不能通过new关键字创建。
3 生存周期:基于内存管理的语言(如Java,.Net),只有单例类能够导致实例被取消分配,因为它包含该实例的私有引用;可手动释放内存的语言(如C++),可以删除对象实例,易出现悬浮引用。
4不易扩展:单例模式没有抽象层,不易扩展。
5负面问题:节省资源,将数据库连接池对象设置为单例类,导致共享连接池对象的程序过多造成连接池溢出。
6对象丢失:实例化的对象长时间不被利用,在基于内存管理的语言中,会被系统回收,从而导致对象状态丢失。
实现:
1 私有,静态,成员变量。
2 私有的构造方法;使实例不能通过new关键字创建。
3 私有的克隆方法;使实例不能被复制或者克隆。
4 静态初始化,getInstance()方法为静态;减少时间开销。
PHP实例
class Singleton{ private static $_instance = null; //私有静态变量 private function __construct(){ //私有构造方法,外部不能通过new获得类的实例 //.. } private function __clone(){} //私有克隆方法,不能被复制或者克隆 public static function getInstance(){ //静态方法获取实例,减少时间消耗 if(!(self::$_instance instanceof self)){ self::_instance = new Singleton(); } return self::_instance; } }
1418131414
From ArcticFox
时间: 2024-10-23 18:19:17