美文网首页
单例设计模式

单例设计模式

作者: 26小瑜儿 | 来源:发表于2019-08-09 22:05 被阅读0次

单例设计模式
1.不允许用户创建这个类的一个对象
2.将类的构造方法私有化
3.在自己的类里面提供创建对象的方法

public class Test {
 public static void main(String[] args){
     //1.正常情况下创建一个对象
     Poker.shared.test();

     Player.getInstance().count += 1;
     Player p = Player.getInstance();
     p.count += 1;
     Player p2 = Player.getInstance();
     p2.count += 1;
     System.out.println(p2.count);
 }
}
饿汉式

饿汉式:即无论是否使用了该对象,在一开始的时候就创建该对象

class Poker{
    //default,sharedInstance,manager
    //2.定义一个静态的成员变量 记录这个单例对象
    饿汉式
    public static final Poker shared = new Poker();

    //1.默认构造函数
    private Poker(){}

    public void test(){

    }
}
懒汉式

当程序获取该单例对象时,会判断该对象是否已经创建
只有第一次使用该对象时会创建对象(如果不使用该对象就不创建,到了使用的时候如果有就拿来用,如果没有再创建该对象)

class Player{
    public int count;

    //2.创建静态变量
    private static Player shared = null;

    //1.私有化构造方法
    private Player(){}

    //3.提供给外部一个访问的方法
    //懒汉式
    public static Player getInstance(){
        Object b = new Object();
        synchronized (b) {
            if (shared == null) {
                //如果没有创建 那么久创建一个
                shared = new Player();
            }
        }

        return shared;
    }
}

注:

懒汉式单例模式是线程不安全的,该单例模式在低并发的情况下尚不会出现问题,若系统压力增大,并发量增加时则可能在内存中出现多个实例,破坏了最初的预期。为什么会出现这种情况呢?如一个线程A执行到 shared = new Player();,但还没有获得对象(对象初始化是需要时间的),第二个线程B也在执行,执行到(shared == null)判断,那么线程B获得判断条件也是为真,于是继续运行下去,线程A获得了一个对象,线程B也获得了一个对象,在内存中就出现两个对象!

解决线程不安全的方法很有多,可以在getInstance方法前加synchronized关键字,也可以在getInstance方法内增加synchronized来实现,但都不是最优秀的单例模式,建议根据系统情况酌情使用饿汉式单例

感悟: 今天的Demo中讲的内容超级多 不懂的也很多,先是把代码写完 然后在对照视频看代码的含义,思考为什么这么写,思考代码中蕴藏的逻辑思维,看的脑阔疼,现在还在敲代码,今天差的其他东西明天补上吧0.0

相关文章

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • python中OOP的单例

    目录 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • 单例

    目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计模式 是 前人...

  • python 单例

    仅用学习参考 目标 单例设计模式 __new__ 方法 Python 中的单例 01. 单例设计模式 设计模式设计...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • 设计模式第二篇、单例设计模式

    目录1、什么是单例设计模式2、单例设计模式的简单实现3、单例设计模式面临的两个问题及其完整实现4、单例设计模式的应...

  • 设计模式 - 单例模式

    设计模式 - 单例模式 什么是单例模式 单例模式属于创建型模式,是设计模式中比较简单的模式。在单例模式中,单一的类...

  • 2、创建型设计模式-单例设计模式

    江湖传言里的设计模式-单例设计模式 简介:什么是单例设计模式和应用 备注:面试重点考查 单例设计模式:这个是最简单...

  • 设计模式之单例模式

    单例设计模式全解析 在学习设计模式时,单例设计模式应该是学习的第一个设计模式,单例设计模式也是“公认”最简单的设计...

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

网友评论

      本文标题:单例设计模式

      本文链接:https://www.haomeiwen.com/subject/fcskjctx.html