美文网首页
single_单例思想

single_单例思想

作者: 外城 | 来源:发表于2018-01-10 19:35 被阅读0次

需求

在整个程序的运行过程中,有且只能有一个当前类的类对象存在,单例思想!

方案

在整个程序的运行过程中,有且只调用一个构造方法

问题

你知道只能调用一次,但是别人不知道
这里除了你自己别人都不会这么认为,任何一个调用者都可以非常简单的通过new 关键字
借助于当前类的构造方法,创建一个新的对象,违背当前情况

解决

让类外无法轻松的调用构造方法,私有化构造方法

问题

私有化之后的构造方法,在类外无法使用,如何在类外创建对象或者说获取对象?

环境

构造方法不能用
类外没有对象
所有和对象有关的方法,都不能使用
现在能够使用的方法只能是静态(static)的方法

方案

借助于静态(static)获取或者创建对象,所以返回值应该是当前类对象类型【SingleDemo】
方法名字:【getInstance()】
参数要和类内私有化的构造方法所需参数一致:【int num】
问题:
创建对象麻烦了,但是效果是一样的
需求:
如果能判断一下当前的程序当中有没有SingleDemo的类对象。如果没有,调用私有化的构造方法;如果有,不再创建
需要一个变量来保存创建对象的地址
变量数据类型 SingleDemo
放哪?
假设:1,用局部变量保存对象地址,不行,每一次调用时,之前的局部已经被销毁
2,用非静态成员变量,也不行,静态方法中不能使用非静态的成员变量
3,用静态成员变量
解决:
用静态成员变量来保存之前创建的对象地址
问题:
发现类外可以直接通过类名来修改静态成员变量的数据
解决:
private修饰
class SingleDemo {
int num;

private static SingleDemo s = null;

private SingleDemo(int num) {
    this.num = num;
}

public void test() {
    System.out.println(this.getClass() + "的test方法");
}

public static SingleDemo getInstance(int num) {
    
    if (s == null) {
        s = new SingleDemo(num);
    }
    //私有化的构造方法可以在类内使用
    return s;
}
}

public class Demo1 {
    public static void main(String[] args) {
    //
//SingleDemo s = new SingleDemo(5);
    SingleDemo s1 = SingleDemo.getInstance(5);
    System.out.println(s1);
    
    SingleDemo s2 = SingleDemo.getInstance(5);
    System.out.println(s2);
    
//SingleDemo.s = null;
    
    SingleDemo s3 = SingleDemo.getInstance(5);
    System.out.println(s3);
    SingleDemo s4 = SingleDemo.getInstance(5);
    System.out.println(s4);
    SingleDemo s5 = SingleDemo.getInstance(5);
    System.out.println(s5);
    SingleDemo s6 = SingleDemo.getInstance(5);
    System.out.println(s6);
    SingleDemo s7 = SingleDemo.getInstance(5);
    System.out.println(s7);
    SingleDemo s8 = SingleDemo.getInstance(5);
    System.out.println(s8);
    SingleDemo s9 = SingleDemo.getInstance(5);
    System.out.println(s9);
    SingleDemo s10 = SingleDemo.getInstance(5);
    System.out.println(s10);
    
}

}

相关文章

  • single_单例思想

    需求 方案 问题 解决 问题 环境 方案 }

  • iOS-单例模式

    swift的单例设计模式 OC的单例设计模式 新学习一种单例思想

  • ios-设计模式-单例

    1)单例是一种编程思想,一个设计模式,与语言无关在采用了单例对象的应用程序中,需要单例类自行提供实例化单例对象,不...

  • 单例

    在iOS开发时,总是会遇到单例模式,单例即是一种模式,更是一种思想,单例模式是借鉴了数学中的单集合。就是一个集合中...

  • Javascript Singleton(单例)模式

    单例模式的定义:单例模式,顾名思义,就是只能实例化一次。单例模式的核心思想就是 : 在该实例 不存在 的情况下,可...

  • [设计模式]你写的单例模式,真的足够安全吗?

    什么是单例模式 单例模式(Singleton Pattern)是Java中常用的设计模式之一,它的思想是只向外部提...

  • android LocalbroadcastReceiver学习

    LocalBroadcastManager 原理 LocalBroadcastManager思想是本地维护一个单例...

  • 2019-04-02设计模式-单例设计模式

    单例设计模式:我认为是一种思想,只要能保持只有一个对象,那这就是一种单例,来看一个简单的例子 上面这也是单例,需要...

  • kotlin实现单例

    java实现单例模式 一直习惯于java的写法,java实现单例主要的思想是构造函数私有,然后考虑线程安全,在实现...

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

网友评论

      本文标题:single_单例思想

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