zoukankan      html  css  js  c++  java
  • 设计模式学习笔记(1)——单例模式

    • 单例模式是常用的设计模式之一,作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,特点:
    1. 某个类只能有一个实例,避免重复实例化。
    2. 必须自行创建这个实例,不允许外部实例化,不允许克隆。
    • 举个例子:
    <?php
    /**
    * 设计模式之单例模式
    * $_instance必须声明为静态的私有变量
    * 构造函数和析构函数必须声明为私有,防止外部程序实例化类。从而失去单例模式的意义
    * getInstance()方法必须设置为公有的,必须调用此方法,以返回实例的一个引用
    * ::操作符只能访问静态变量和静态函数
    * new对象都会消耗内存,使用场景:最常用的地方是数据库连接。使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。 
    */
    class Singleton
    {
    	private static $_instance;
    
    	//阻止用户实例化 实例化抛出Fatal error
    	private function __construct(){}
    
    	//阻止用户复制对象实例 抛出Fatal error
    	public function __clone()
    	{
    		throw new Exception("not allow clone this class.");
    	}
    
    	//单例方法
    	public static function getInstance()
    	{
    		if(!(self::$_instance instanceof self))
    		{
    			self::$_instance = new self();
    		}
    
    		return self::$_instance;
    	}
    
    	public function doSomething()
    	{
    		echo("to do something");
    	}
    }
    
    //$singleton = new Singleton(); //Fatal error
    
    $singleton = Singleton::getInstance();
    
    $singleton->doSomething();
    
    //$t = clone $singleton;//Fatal error
    
    
    
  • 相关阅读:
    ViewDragHelper: ViewDragHelper的使用
    HashMap存入和取出数据顺序不一致
    服务器raid卡、磁盘缓存的配置策略
    关于LVS+Nginx为什么会被同时使用的思考
    JDT Icons-eclipse图标大全
    EclipseHTML/JS/CSS/JS 代码自动提示
    eclipse maven设置本地仓库
    mysql 补零操作(zerofill)
    mysql datetime字段默认值 设置 当前时间
    Timed out as no activity
  • 原文地址:https://www.cnblogs.com/stringfade/p/7242409.html
Copyright © 2011-2022 走看看