首页 > 其他分享 >20230426 21. 单例模式

20230426 21. 单例模式

时间:2023-06-19 10:13:16浏览次数:48  
标签:20230426 21 private instance 实例 static 单例 Singleton3 public

介绍

单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。

通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。

单例模式因为Singleton类封装它的唯一实例,这样它可以严格地控制客户怎样访问它以及何时访问它。简单地说就是对唯一实例的受控访问。

单例模式

代码示例

懒汉式

public class Singleton1 {

    private static Singleton1 instance;

    // 构造方法private化
    private Singleton1() {
    }

    // 得到Singleton的实例(唯一途径)
    public static Singleton1 getInstance() {

        if (instance == null) {
            instance = new Singleton1();
        }

        return instance;
    }
}

饿汉式

public class Singleton2 {

    private static Singleton2 instance = new Singleton2();

    // 构造方法private化
    private Singleton2() {
    }

    // 得到Singleton的实例(唯一途径)
    public static Singleton2 getInstance() {
        return instance;
    }
}

多线程

public class Singleton3 {

    private volatile static Singleton3 instance;

    // 构造方法private化
    private Singleton3() {
    }

    // 得到Singleton的实例(唯一途径)
    public static Singleton3 getInstance() {

        if (instance == null) {
            synchronized (Singleton3.class) {
                if (instance == null) {
                    instance = new Singleton3();
                }
            }
        }
        return instance;
    }
}

还有很多其他写法可以扩展研究下。。。

标签:20230426,21,private,instance,实例,static,单例,Singleton3,public
From: https://www.cnblogs.com/huangwenjie/p/17490396.html

相关文章

  • 20230421 10. 模板方法模式 - 试卷答题
    既然用了继承,并且肯定这个继承有意义,就应该要成为子类的模板,所有重复的代码都应该要上升到父类去,而不是让每个子类都去重复当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理模板方法(Templa......
  • 20230421 14. 观察者模式 - 摸鱼通知
    观察者模式又叫作发布-订阅(Publish/Subscribe)模式观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。Subject类,可翻译为主题或抽象通知者,一般用一个抽象类或者一个......
  • 20230421 13. 建造者模式 - 画小人
    '建造者模式(Builder)',又叫生成器模式建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。如果我们用了建造者模式,那么用户就只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知道了。Builder是为创建一个Pro......
  • 20230426 18. 备忘录模式 - 游戏人物
    介绍备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。Originator可根据需要决定M......
  • 20230426 17. 适配器模式 - NBA外籍中锋
    介绍适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式主要解决的问题:简单地说,就是需要的东西就在面前,但却不能使用,而短时间又无法改造它,于是我们就想办法适配它系统的数据和......
  • 20230426 16. 状态模式 - 工作状态
    介绍状态模式(State),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化State类,抽象状态类,定义一......
  • 20230426 19. 组合模式 - 分公司
    介绍组合模式(Composite),将对象组合成树形结构以表示'部分-整体'的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。Component为组合中的对象声明接口,在适当情况下,实现所有类共有接口的默认行为Leaf在组合中表示叶节点对象,叶节点没有子节点Composite定义......
  • 20230426 20. 迭代器模式
    介绍迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,你就应该考虑用迭代器模式你需要对聚集有多种方式遍历时,可以考虑用迭代器模式。为遍历不同的聚集结构提供......
  • std::thread 六:多线程&单例类
     为了避免单例类在多线程中重复的创建,下面提供了两种解决方法:1.互斥锁+双重检查2.std::call_once() 方法一:互斥锁+双重检查#include<iostream>#include<thread>#include<mutex>#include<list>usingnamespacestd;std::mutexmy_mutex;//创建一个单......
  • 单例模式-07
    概述单例模式(SingletonPattern)又称单件模式、单态模式。确保一个类只能有一个实例,同时保证该类的实例只能在类内部创建,提供给整个系统使用。优点:节约系统资源,提高系统性能。缺点:扩展困难,一定程度上违反了“单一职责原则”。classSingleton{privatestaticSingleton......