`

传说中的单例模式

阅读更多
单例模式:
    确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例

特点:
    1.单例类只能有一个实例
    2.单例类必须自己创建自己的唯一实例
    3.单例必须给所有其他对象提供这一实例

单例类的三种实现方式:
1.懒汉式单例:
//懒汉式单例类.在第一次调用的时候实例化   
public class Singleton2 {  
    //私有的默认构造子  
    private Singleton2() {}  
    //注意,这里没有final      
    private static Singleton2 single=null;  
    //静态工厂方法   
    public synchronized  static Singleton2 getInstance() {  
         if (single == null) {    
             single = new Singleton2();  
         }    
        return single;  
    }  
}


2.饿汉式单例:
//对第一行static的一些解释
// java允许我们在一个类里面定义静态类。比如内部类(nested class)。
//把nested class封闭起来的类叫外部类。
//在java中,我们不能用static修饰顶级类(top level class)。
//只有内部类可以为static。
public static class Singleton{
    //在自己内部定义自己的一个
    实例,只供内部调用
    private static final Singleton instance = new Singleton();
    //自行实例化
    private Singleton(){
        //do something
    }
    //这里提供了一个供外部访问本class的静态方法,可以直接访问
    public static Singleton getInstance(){
        return instance;
    }
}


3.双重锁单例:
public static class Singleton{
    private static Singleton instance=null;
    private Singleton(){
        //do something
    }
    public static Singleton getInstance(){
        if(instance==null){
            synchronized(Singleton.class){
                if(null==instance){
                    instance=new Singleton();
                }
            }
        }
        return instance;
    }
}
//这个模式将同步内容下方到if内部,提高了执行的效率,不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了。


注:单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
分享到:
评论

相关推荐

    传说中的经典设计模式书

    1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。这种模式常用于配置管理或系统级别的日志记录服务,防止多个实例导致资源浪费或状态冲突。 2. **工厂模式**:提供一个接口来创建一系列相关或相互依赖...

    设计模式作业

    在这个“设计模式作业”中,我们将关注五种主要的设计模式:单例模式、工厂模式、门面模式以及策略模式。 **1. 单例模式** 单例模式是一种限制类实例化次数为一个的模式,确保一个类只有一个实例,并提供全局访问点...

    设计模式大作业

    在这个“设计模式大作业”中,我们可以看到涵盖了多种设计模式的实例和代码,包括“工厂模式”和“单例模式”,以及其他的经典设计模式。 1. **工厂模式**:这是创建型设计模式,它提供了一种创建对象的最佳方式。...

    黑夜传说webame 源码

    再者,源码中可能包含了一些游戏设计模式,如工厂模式用于创建不同类型的对象,单例模式确保某个类只有一个实例,策略模式用于定义一系列算法并使它们可以互相替换,这些设计模式的运用使得代码结构更加清晰,易于...

    c++编写传统游戏(类影子传说)

    我们可以采用工厂模式来创建不同类型的对象,单例模式来管理共享资源(如音频、图形设置),以及策略模式来实现游戏规则的变化。 测试也是游戏开发的关键环节。我们需要编写单元测试来验证各个组件的功能,以及集成...

    Java剑神传说完整代码包.rar

    10. **游戏设计模式**:观察代码中使用的软件设计模式,如工厂模式、单例模式等,这些模式对于理解和重构代码至关重要。 通过深入研究这个Java剑神传说的完整代码包,开发者不仅可以提升Java编程技能,还能学习到...

    NETCTOSS项目

    "NETCTOSS项目"是一个基于.NET技术栈的软件开发项目,从描述中的"通天塔 代码"我们可以推测,这个项目可能涉及到构建一个大型、复杂的系统,寓意着项目目标之高,就像古时传说中的通天之塔。在.NET框架下,开发者...

    c++约瑟夫环

    6. **设计模式**:为了使程序结构清晰,可能应用了面向对象的设计模式,如单例模式(用于管理全局资源,如线程池)、观察者模式(用于更新UI)等。 7. **错误处理和调试**:在C++程序中,良好的错误处理和调试策略...

    C#源码:汉诺塔

    此外,可能还运用了单例模式来管理游戏实例,或者工厂模式来创建柱子和盘子对象。 综上所述,这个C#汉诺塔游戏源码涵盖了递归算法、用户交互、错误处理、编译环境选择、图形界面设计、调试与测试等多个IT领域的重要...

    JAVA汉诺塔可视化设计(含源码)

    在实际编程中,我们可以使用Java Swing或JavaFX来构建图形用户界面,使用面向对象的设计模式组织代码,如单例模式管理背景音乐,工厂模式创建盘子对象,而递归函数则用于实现汉诺塔的移动逻辑。同时,利用文件I/O...

    Shan-Hai:Bowen He的论文项目

    10. **设计模式**:在大型项目中,开发者通常会遵循一定的设计模式,如单例模式、工厂模式、装饰器模式等,以保证代码的可维护性和扩展性。 "山海:鲍文赫的论文项目"可能涵盖了以上诸多C#技术,并结合特定的应用...

    CSC250_Spring2021_HeartOfStoneDeckTracker

    5. **设计模式**:为了实现可扩展性和代码重用,项目可能运用了单例模式、工厂模式或观察者模式等设计模式。 6. **测试与调试**:开发过程中,单元测试(JUnit)和集成测试可能被用来确保代码的正确性。开发者可能...

Global site tag (gtag.js) - Google Analytics