设计模式_01_单例模式

常见设计模式之单例模式

单例模式_PHP语言描述

懒汉式(并发时会有缺陷)

class MediaPlayer{      
	  // 1,懒汉式(需要的时候才实例化) 存在并发的问题
      private static $obj;

      // 2,构造函数私有化
      private function __construct(){}

      // 3,克隆方法也要私有化
      private function __clone() {}
      
      // 4,给外界提供一个静态接口
      public static function shareInstance(){
      	  // 如果不存在, 才要初始化
          if( !self::$obj ){     
              self::$obj = new self();
              // 也可以这样写
              // self::$obj=new MediaPlayer();
          }
          // 检验方法$p1===$p2 比较内存地址
          return self::$obj;   
      }      
   }

$s1 = MediaPlayer::shareInstance();
$s2 = MediaPlayer::shareInstance();

var_dump($s1);
var_dump($s1 === $s2);
var_dump($s2);


单例模式_JavaScript语法描述


// 定义类
let MediaPlayer = function() {
}

// 利用闭包的特性创建单例,同时符合惰性单例的特性
MediaPlayer.shareInstance = (function() {
    let instance
    return function(){
        if (!instance) {
            instance = new MediaPlayer()
        }
    }
})()

var player_1 = MediaPlayer.shareInstance()
var player_2 = MediaPlayer.shareInstance()

NSLog(player_1 === player_2)  

效果如下:



单例模式_Objective-C语言描述

// 单例模式
+ (MediaPlayer *)shareInstance
{
    static MediaPlayer *player = nil ;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        if (player == nil) {
player = [[MediaPlayer alloc] init];
        }
    });
    return player;

}


单例模式_Java语法描述

第1种: 饿汉式(一上来就生成实例对象,线程安全,开发中常用,推荐)

class MediaPlayer {

    prviate static MediaPlayer player = new MediaPlayer();

    // 构造方法私有化

    private MeidaPlayer(){};

    // 提供统一访问入口

    public static final MediaPlayer shareInstance(){

        return player;

    }

}


第2种: 懒汉式(延迟加载,遇到多线程会出问题)

class MediaPlayer {

    private static MediaPlayer player = null;

    private Media(){};

    public static MediaPlayer shareInstance(){

        if(player == null){

            // 这儿有安全隐患

            player = new MediaPlayer();

        }

        return player;

    }

}

懒汉式的解决办法之一是: 

        在shareInstance()方法上面 加同步 关键字 synchronized 










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值