`
zhangwei_david
  • 浏览: 469565 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java 设计模式-单例模式(Singleton)

 
阅读更多

      什么是单例模式?

      单例模式就是某个类只有唯一一个实例。

      单例模式的意图

        单例模式的意图是为了确保一个类有且仅有一个实例,并且为它提供一个全局的访问点

      单例模式的要点

  1.   一个类只有一个实例
  2. 类必须自行创建这个实例
  3. 类自行向系统提供实例

       常见的单例实现方式

  • 饿汉模式
饿汉模式在类中声明一个实例并初始化

 

/**
 * 饿汉单例模式
 * @author zhanfgwei
 * @version $Id: HungrySingleton.java, v 0.1 2014年9月20日 下午10:17:11 Lenovo Exp $
 */
public class EagerSingleton {

    /***初始化一个实例**/
    private static final EagerSingleton instance = new EagerSingleton();

    /**
     * 私有化的构造方法
     */
    private EagerSingleton() {
        super();
    }

    /**
     * 静态工厂方法获取实例
     *
     * @return
     */
    public static EagerSingleton getInstance() {
        return instance;
    }

}

 

  •  懒汉模式-线程安全
懒汉模式,是延迟初始化但是如果工厂方法不同步会导致产生多实例
/**
 *
 * @author zhangwei
 * @version $Id: SafeLazySingleton.java, v 0.1 2014年9月20日 下午10:25:04 Lenovo Exp $
 */
public class SafeLazySingleton {

    /**
     * 实例属性
     */
    private static SafeLazySingleton instance = null;

    /**
     * 私有化构造方法
     */
    private SafeLazySingleton() {

    }

    /**
     *同步的静态工厂方法
     *
     * @return
     */
    synchronized public static SafeLazySingleton getInstance() {
        if (instance == null) {
            instance = new SafeLazySingleton();
        }
        return instance;
    }

}
  •  内部类方式
内部类方法是对懒汉模式的优化,结合了饿汉模式和懒汉模式的有点,有效地解决了延迟初始化和线程安全问题。

 

/**
 *
 * @author zhangwei
 * @version $Id: InnerSingleton.java, v 0.1 2014年9月20日 下午11:11:26 Lenovo Exp $
 */
public class InnerSingleton {

    /**
     * 私有化的构造方法
     */
    private InnerSingleton() {

    }

    /**
     * 静态内部类,持有实例
     *
     * @author zhangwei
     * @version $Id: InnerSingleton.java, v 0.1 2014年9月20日 下午11:22:35 Lenovo Exp $
     */
    private static class InstanceHolder {

        static InnerSingleton instance = new InnerSingleton();
    }

    /**
     * 静态工厂方法,
     *
     * @return
     */
    public static InnerSingleton getInstance() {
        return InstanceHolder.instance;
    }

}

 

  •  登记式
/**
 *
 * @author zhangwei
 * @version $Id: RegisterSingletone.java, v 0.1 2014年9月20日 下午10:27:12 Lenovo Exp $
 */
public class RegisterSingleton {

    private static Map<String, RegisterSingleton> registers = new ConcurrentHashMap<String, RegisterSingleton>();

    static {
        registers.put(RegisterSingleton.class.getName(), new RegisterSingleton());
    }

    private RegisterSingleton() {

    }

    public static RegisterSingleton getInstance(String name) {
        if (name == null) {
            name = RegisterSingleton.class.getName();
        }
        if (registers.get(name) == null) {
            try {
                registers.put(name, (RegisterSingleton) Class.forName(name).newInstance());
            } catch (Exception e) {
                LoggerUtils.error("异常");
            }
        }
        return registers.get(name);
    }

}

 

0
0
分享到:
评论
2 楼 zhangwei_david 2015-02-02  
zskangs1126 写道
登记式 一般用在什么地方?

这个只是单例模式实现的方式
1 楼 zskangs1126 2015-02-02  
登记式 一般用在什么地方?

相关推荐

    Java面向对象(高级)- 单例(Singleton)设计模式

    Java面向对象(高级)-- 单例(Singleton)设计模式

    JAVA设计模式-day2.pdf

    JAVA设计模式-day2,请的行业大能讲得课程,涉及:创建模式(5种: 1、 工厂方法模式(Factory Method); 2、 抽象工厂模式; 3、 单例模式(Singleton) • 4、 建造者模式(Builder); 5、 原型模式(Prototype...

    Java面试 java设计模式整理 单例、工厂、策略等 面试使用,学习使用

    java的设计模式大体上分为三大类: 2 设计模式遵循的原则有6个: 2 1. 工厂模式(Factory Method) 2 2. 抽象工厂模式(Abstract Factory) 3 3. 单例模式(Singleton) 4 4.建造者模式(Builder) 4 5. 原型模式...

    Java 单例模式Singleton

    简单的单例模式举例Singleton 分为恶汉式 懒汉式

    java 设计模式 单例模式

    //单例模式,始终只产生一个对象 /*public class SingleTest { public static void main(String[] args) { SingleTon singleTon1=SingleTon.getInstance(); SingleTon singleTon2=SingleTon.getInstance(); ...

    singleton_单例模式_java_设计模式_

    java设计模式,单例模式的不同实现方式

    java版本二十三种设计模式.zip

    - 23种设计模式 - 工厂方法模式(Factory Method) - 抽象工厂模式(Abstract Factory) - 单例模式(Singleton) - 建造者模式(Builder) - 原型模式(Prototype) - 代理模式(Proxy) - 适配器模式(Adapter) - 装饰...

    Java设计模式之单例模式及其应用

     Java中单例模式的定义是:一个类只有一个实例,而且自行实例化并且向整个系统提供这个实例。  优点:由于单例模式在内存中只有一个实例,减少了内存开支和系统的性能开销;单例模式可以避免对资源的多重占用。 ...

    设计模式_单例模式.zip

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 学习demo

    Java常用的3中设计模式代码即工厂模式、单例模式、观察者模式demo

    java 三种设计模式Demo 其中对单例模式做了详细的讲解,及性能和线程安全方面的优化其中Singleton.java为经典单例模式。

    Java设计模式单例模式(Singleton)用法解析

    主要介绍了Java设计模式单例模式(Singleton)用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    单例模式 Singleton Pattern

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个...

    Java设计模式之单态模式(Singleton模式)介绍

    主要介绍了Java设计模式之单态模式(Singleton模式)介绍,本文讲解了如何使用单例模式、使用单例模式注意事项等内容,需要的朋友可以参考下

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    《java设计模式(第2版)》通过一个完整的java项目对经典著作design patterns一书介绍的23种设计模式进行了深入分析与讲解,实践性强,却又不失对模式本质的探讨。本书创造性地将这些模式分为5大类别,以充分展现各个...

    23种设计模式的java源代码

    里面包含了23中设计模式源代码,其中包括工厂模式(Factory)、单例(Singleton)、观察者模式(Observer)、适配器模式(Adapter)、Template模式、Decorate模式、proxy模式等 这些代码对于初学者看起来稍微复杂一些,我...

    java设计模式之单例模式学习

    单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1...

    java设计模式期末考试选择题100道

    适合Java设计模式期末考试选择题复习,形式如下: 10.(单选题)Facade(外观)模式的意图是 正确答案: A A.希望简化现有系统的使用方法,你需要定义自己的接口 B.将一个无法控制的现有对象与一个特定借口相匹配。 C....

    33种JAVA设计模式DEMO

    单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2 结构型模式 这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。 适配器...

    JAVA中的单例模式诠释

    单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在

Global site tag (gtag.js) - Google Analytics