zoukankan      html  css  js  c++  java
  • java中的单例设计模式

    如果希望某个类的对象只能存在一个,可以使用单例设计模式,单例设计分为俄汉式和懒汉式

    先看一下俄汉式:

    //单例俄汉式
    class Single1{
        private Single1(){};
        private static Single1 single1 = new Single1();
        public static Single1 getSingle1(){
            return single1;
        }
    }

    既然要保证Single1类的对象只存在一个,那就不让其他人来创建这个类的对象,要私有化构造函数:private Single1(){};

    那别人不能创建这个类的对象了,怎么让别人取得这个类的对象呢,就自己提供一个方法getSingle1(),来返回这个对象,别人不能创建这个类的对象,

    所以不能通过对象来调用这个方法,可以通过类名.getSingle1();来调用,所以这个方法要声明为static的,而这个方法要返回single1,所以single1

    也要定义为static的:private static Single1 single1 = new Single1();

    调用这个对象:

    public class SingleDemo {
        public static void main(String[] args) {
            //调用某类自己提供的方法来产生某类的唯一对象
            Single1 s1 = Single1.getSingle1();
        }
    }

    另一种是懒汉式:

    class Single{
        private Single(){};
        private static Single single = null;

        //为了防止多线程操作,可以加锁,用synchronized 块或者在方法上加synchronized都行
        public static /*synchronized*/  Single getSingle(){
            if(null==single){//为空才进锁,提高性能
                synchronized(Single.class){  
                    if (null==single) {
                        single = new Single();
                    }
                }  
            }
            return single;
        }
        
        public void  show(){
            System.out.println("dasini");
        }
    }

    调用:

    public class SingleDemo {
        public static void main(String[] args) {
            //调用某类自己提供的方法来产生某类的唯一对象
            Single s1 = Single.getSingle();
            Single s2 = Single.getSingle();
            System.out.println(s1); //同一个 p0115.Single@7f39ebdb
            System.out.println(s2); //同一个 p0115.Single@7f39ebdb
            System.out.println(s1==s2); //true说明是同一个对象,保证了对象的唯一性
            
            Single.getSingle().show();
        }
    }

    希望对大家有所帮助!!!

  • 相关阅读:
    2017.10.04
    2017.10.03
    Luogu P3110 [USACO14DEC]驮运Piggy Back
    Luogu P2176 [USACO14FEB]路障Roadblock
    Luogu P3797 妖梦斩木棒
    数列分块入门1-9 By hzwer
    CodeForces 【20C】Dijkstra?
    Luogu P2835 刻录光盘
    Luogu P1692 部落卫队
    Luogu P2847 [USACO20DEC]Moocast(gold)奶牛广播-金
  • 原文地址:https://www.cnblogs.com/zhuangwf/p/5150866.html
Copyright © 2011-2022 走看看