码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2020-03-06 10:43:27      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:托管   实现   null   设计   一个   饿汉式   内存占用   --   模式   

单例模式(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));//默认也比地址
    }
}

 

单例模式

标签:托管   实现   null   设计   一个   饿汉式   内存占用   --   模式   

原文地址:https://www.cnblogs.com/hsy-go/p/12425115.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!