当前位置: 移动技术网 > IT编程>软件设计>设计模式 > 23种设计模式(1):单例模式

23种设计模式(1):单例模式

2019年03月26日  | 移动技术网IT编程  | 我要评论
定义: 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要 ...

定义

  单例模式(singleton pattern)是 java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

结构:

  • 指向自身的静态实例的私有静态引用
  • 私有构造函数
  • 返回自身实例的公有构造函数

类图:

实现:

  1.饿汉式单例

public class eagersingleton {

    //指向自己实例的私有静态引用
    private static eagersingleton eagersingleton = new eagersingleton();

    //私有的构造方法
    private eagersingleton(){};

    //以自己实例为返回值的静态公有方法
    public static  eagersingleton getinstance(){
        return  eagersingleton;
    }
}
view code

  2.懒汉式单例

public class lazysingleton {

    //指向自己实例的私有静态引用
    private static  lazysingleton lazysingleton = null;

    //私有的构造方法
    private lazysingleton(){};

    //以自己实例为返回值的静态公有方法
    public static synchronized lazysingleton getinstance(){
        if(lazysingleton == null){
            lazysingleton = new lazysingleton();
        }
        return lazysingleton;
    }
}
view code

优点:

  1. 在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例。
  2. 避免对资源的多重占用(比如写文件操作)。

注意事项:

  1. 使用时不能用反射模式创建单例,否则会实例化一个新的对象 
  2. 使用懒单例模式时注意线程安全问题 
  3. 饿单例模式和懒单例模式构造方法都是私有的,因而是不能被继承的,有些单例模式可以被继承(如登记式模式) 

总结:

   单例模式作为最常用的设计模式之一,其实现方式除了饿汉式和懒汉式两种方式之外,还有双检锁/双重校验锁机制、登记式/静态内部类和枚举等方式。 饿汉式单例和懒汉式单例由于构造方法是private的,不可被继承。只能使用单例类提供的方法得到单例对象,不要使用反射,否则将会实例化一个新对象。

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网