• 单例模式


    单例设计模式:(Singlelon)

    如果没有构造方法,会在编译时候自动构造一个什么都不干的构造方法

    如果构造方法私有化,则外部不能使用 new 关键字实例化对象。

    class Singleton{

        static Singleton instance = new Singleton() ;

        public void print(){

            System.out.println("Hello") ;

        }

    }

    public class Test{

        public static void main(String arg[]){

            Singleton s = null;

            s = Singleton.instance ;

            s.print() ;

        }

    }

    但是这样不符合类的封装性

    所以需要用 private修饰instance

    class Singleton{

        private static Singleton instance = new Singleton() ;

        public void print(){

            System.out.println("Hello") ;

        }

        public static Singleton getInstance(){

            return instance ;

        }

    }

    public class Test{

        public static void main(String arg[]){

            Singleton s = null;

            s = Singleton.getInstance() ;

            s.print() ;

        }

    }

    但是现在无论

    S1 = Singleton.getInstance();

    S2 = Singleton.getInstance();

    S3 = Singleton.getInstance();

    得到的都是同一个实例。

    如果要控制一个类的实例化个数,那么就要锁定构造方法!!!

    但是如果现在将getInstance方法中变为

    Return new Singleton();也是有点小缺陷的

    所以程序要这么写:
    class Singleton{

        private static final Singleton INSTANCE = new Singleton() ;

        public void print(){

            System.out.println("Hello") ;

        }

        public static Singleton getInstance(){

            return INSTANCE ;

        }

    }

    public class Test{

        public static void main(String arg[]){

            Singleton s = null;

            s = Singleton.getInstance() ;

            s.print() ;

        }

    }

    可是对于单例设计模式有两种模式:

    1. 饿汉式
    2. 懒汉式

    之前写的就是饿汉式,在Singleton定义的时候就准备好了一个对象,并没有关系这个对象有没有使用,懒汉式的特点是第一次使用 的时候实例化,以后都不实例化。

    懒汉式:

    class Singleton{

        private static final Singleton instance ;

        public void print(){

            System.out.println("Hello") ;

        }

        public static Singleton getInstance(){

            if(instance == null)

                return new Singleton() ;

            else

                return instance ;

        }

    }

    public class Test{

        public static void main(String arg[]){

            Singleton s = null;

            s = Singleton.getInstance() ;

            s.print() ;

        }

    }

  • 相关阅读:
    ConcurrentHashMap实现原理--转载
    java原子操作的实现原理--转载
    Catch Me If You ... Can't Do Otherwise--转载
    微框架spark--api开发利器
    Exploring Micro-frameworks: Spring Boot--转载
    简约之美jodd--props属性使用
    jodd-cache集锦
    java根据url获取完整域名
    Jodd-vtor验证框架
    倒排列表求交集算法 包括baeza yates的交集算法
  • 原文地址:https://www.cnblogs.com/da-peng/p/5129777.html
Copyright © 2020-2023  润新知