首先说明一下, 设计模式不局限于语言之间, 思想一致, 都是为了更好的解决软件设计中的问题, 博主这里使用PHP
做示例, 其他语言中如果设计方式有不一样的会进行说明的。
说明
单例模式是设计模式中非常常用的一种设计方案, 顾名思义就是只有一个实例。单例模式确保某一个类只有一个实例,不能重复实例,只能它自己实例化,而且向整个系统提供这个实例。
一个类只被实例化一次,当其他人对其再次实例化时,返回第一次实例化的对象,可以避免大量的new
操作,减少资源的消耗,典型应用于数据库类的实例化。
一般就是三私一公
- 构造函数私有化
- 克隆函数私有化
- 私有存放实例的成员属性
- 公有获取实例的函数 并且设为静态方法
示例
<?php /** * Created by 憧憬. */ class Singleton { //私有属性,用于保存实例 private static $instance; //构造方法私有化,防止外部创建实例 private function __construct(){} //公有属性,用于测试 public $name; /** * 公有方法,用于获取实例 * @return Singleton * @author: 憧憬 */ public static function getInstance(){ //判断实例有无创建,没有的话创建实例并返回,有的话直接返回 if(!(self::$instance instanceof self)){ self::$instance = new self(); } return self::$instance; } //克隆方法私有化,防止复制实例 private function __clone(){} } $instance = Singleton::getInstance(); $instance->name = '这是实例化的第一个对象, 然后给他设置属性值'; $newInstance = Singleton::getInstance(); $newInstance->name = '新对象进行修改'; echo $newInstance->name; // 新对象进行修改 echo $instance->name; // 新对象进行修改
java童鞋注意
java
是多线程, 以上例子在java
设计里面是非线程安全的, 可以为根据业务, 使用频率上不同锁, 具体请百度, 这里不做多赘述, 重点在于思想。