单例模式

Posted hsy-go

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式相关的知识,希望对你有一定的参考价值。

单例模式(SingleTon)

    设计——一个类只能创建一个对象 有效减少内存占用空间
         因为可能同一时间有很多人同时使用这个系统

单例模式的实现
    1、私有的构造方法——(确保类外不能随意创建)
   2、私有的静态的当前类属性——(私有确保类外不能随意创建,静态确保属性只能加载一次)
   3、公有的静态的获取单个对象的方法——(若不加static 类外要产生调用此方法,需要先创建对象,而没有对象)
 
   饿汉式(立即加载)   对象启动就加载
     不会产生空指针异常
     可能增加服务器压力
   懒汉式(延迟加载)对象用到的时候加载 
     可能会由于没有操作好 导致异常
     不会浪费空间
   生命周期托管(单例对象帮我们处理)对象加载过程交给别人

package singleton;

public class SingleTon {
    //经过设计 使得该类只能创建一个对象
    //构造方法--公有 在外面可以随意创建 
    //1.让构造方法变成私有
    private SingleTon(){}
    //2.单例 不是无例--在本类的某个成员位置上创建唯一的一个对象
    //在以下的四个位置  写一行new SingTon
    //属性
    //方法——不行,每次执行都会产生一个过程 创建一个对象 不能保证唯一
    //构造方法——不行 私有  本身是构建对象的过程
    //块——不行  没有返回值 创建对象了也没法给别人使用
    //3、在当前类中存在一个私有的静态属性 是当前类类型的
    private static SingleTon single ;//直接=new SingleTon() 懒汉加载 ;如果不加static 会产生栈内存溢出
    //4、提供一个获取单个对象的方法
    //返回值?有
    //外面要调方法 但是并没有对象 将该方法设置为静态 通过类名直接调用
    public static SingleTon getSingleTon(){
        if(single == null){
            single = new SingleTon();//延迟加载的方式
        }
        return single;
    }
}
package singleton;

public class Test {
    public static void main(String[] args) {
        SingleTon s1 = SingleTon.getSingleTon();//通过类名访问静态方法
        SingleTon s2 = SingleTon.getSingleTon();
        System.out.println(s1 == s2);//比较地址
        System.out.println(s1.equals(s2));//默认也比地址
    }
}

 

以上是关于单例模式的主要内容,如果未能解决你的问题,请参考以下文章

常用代码片段

性能比较好的单例写法

片段作为 Android 中的单例

单例片段或保存网页视图状态

你熟悉的设计模式都有哪些?写出单例模式的实现代码

单例模式以及静态代码块