java学习之单例模式

一杯水M      2022-05-19     657

关键词:

单例设计模式:解决一个类在内存中只存在一个对象
思想:
1.为了避免过多创建类的对象,禁止此类以外创建对象(构造方法私有化)
2.为了类可以被使用就必须创建此类对象,只好在本类中,创建对象
3.在此类中创建的对象,怎么给此类以外的使用,所已此类必须提供返回对象的一个方法
代码体现:
1.将构造函数私有化
2.在类中创建对象
3.提供一个方法用于获取此类对象
class Single
{
    /**
    方式一、饿汉式
    开发建议使用
    */
    //1.将构造函数私有化
    private Single(){}
    //2.在类中创建对象
    private static Single s=new Single();
    //3.提供一个方法用于获取此类对象
    public static Single getInstance()
    {
        return s;
    }
    /**
    方式二、懒汉式
    */
    private Single(){}
    private static Single s=null;
    //线程不安全
    public static Single getInstance()
    {
        if(s==null)
            s=new Single();
        return s;
    }
    //加同步(效率低)
    public static synchronized Single getInstance()
    {
        if(s==null)
            s=new Single();
        return s;
    }
    //双重判断
    public static Single getInstance()
    {
        if(s==null)
        {
            synchronized(Single.class)
            {
                if(s==null)
                    s=new Single();
            }
        }
        return s;
    }
    
    private int num;
    public int getNum()
    {
        return num;
    }
    public void setNum(int num)
    {
        this.num=num;
    }
}

class SingleDemo
{
    public static void main (String[] args)
    {
        Single s1=Single.getInstance();
        Single s2=Single.getInstance();
        s1.setNum(23);
        System.out.println(s2.getNum());
    }
}

 

23种设计模式学习之单例模式

用内部类来维护单例的实现publicclassSingleton{  //私有构造方法,防止被实例化privateSingleton(){}  //用一个内部类来维护单例privatestaticclassSingletonFactory{privatestaticSingletonsingleton=newSingleton();}  //获取实例publicstaticSingletonget 查看详情

spring源码学习之设计模式单例模式

众所周知,单例模式分为饿汉式和懒汉式,昨天在看了《spring5核心原理与30个类手写实战》之后才知道饿汉式有很多种写法,分别适用于不同场景,避免反射,线程不安全问题。下面就各种场景、采用的方式及其优缺点介绍。饿... 查看详情

python学习之八设计模式和异常(代码片段)

环境  虚拟机:VMware10  Linux版本:CentOS-6.5-x86_64  客户端:Xshell4  FTP:Xftp4  python3.6一、设计模式1、单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式... 查看详情

java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。Java设计模式之工厂模式简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之所以... 查看详情

一起学java(三十)-----单例模式

不积跬步,无以至千里;不积小流,无以成江海。 Java语言基础 Java的单例模式 查看详情

java学习之dao设计模式

  DAO设计模式是一个javaEE里的设计模式,DAO是DataAccessObject数据访问接口。  一个典型的DAO实现有三个组件:    1、一个DAO接口    2、一个DAO接口的具体类;    3、数据传递对象(DTO)或者叫值对象(VO)或者... 查看详情

java集合类学习之vector

package com.fish.list;import java.util.Enumeration;import java.util.Vector;/*集合 的体系:------------| Collection 单例集合的根接口----------------| List 如果是实现了List接口的集合类,具备的 查看详情

java集合类学习之hashset

package com.fish.set;import java.util.HashSet;import java.util.Set;/*集合 的体系:------------| Collection 单例集合的根接口----------------| List  如果是实现了List接口的集合类,具备的特点 查看详情

java设计模式--工厂模式学习之使用…

 如果不使用工厂模式来实现我们的例子,也许代码会减少很多--只需要实现已有的车,不使用多态。但是在可维护性上,可扩展性上是非常差的(你可以想象一下,添加一辆车后要牵动的类)。因此为了... 查看详情

对比java学kotlin单例模式(代码片段)

文章目录Java实现Kotlin实现参考文档Java实现先来回忆一下Java代码实现单例的一种方式:publicclassSingletonprivatestaticSingletoninstance=null;privateSingleton()publicstaticSingletongetInstance()if(instance==null)synch 查看详情

编程学习之简单工厂模式与策略模式

很久之前在学习c++的时候就听到老师说写代码要考虑重构,架构,在此期间学习到了一种简单工厂模式。何为简单工厂模式呢?简单工厂模式又叫静态工厂方法模式(StaticFactoryMethodPattern),是通过专门定义一个类来负责创... 查看详情

javase学习之枚举

JavaSE枚举类枚举类介绍类的对象只有有限个、确定的。我们称此类为枚举类线程状态:创建、就绪、运行、堵塞、死亡当需要定义一组常量时,强烈建议使用枚举类如果枚举类中只有一个对象,则可以作为单例模式的实现方式枚... 查看详情

laravel源码学习之container

Ioc模式Ioc(InversionofControl)模式又称依赖注入(DependencyInjection)模式。控制反转就是将组件之间的依赖关系从程序的内部转移到程序外部,而依赖注入是指组件的依赖关系通过外部参数或其他形式注入,两种说法从本质上是一样的。... 查看详情

java线程学习之master-worker模式(代码片段)

  Masker-Worker的核心思想是有两类进程(Masker进程和Worker进程)协作完成任务。Masker进程负责接收和分配任务,Worker负责处理子任务,当各个Worker子进程完成任务后会将结果返回给Masker,由Masker做归纳和总结。其好处在于... 查看详情

autofac学习之三种生命周期:instanceperlifetimescopesingleinstanceinstanceperdependency转载

InstancePerLifetimeScope:同一个Lifetime生成的对象是同一个实例SingleInstance:单例模式,每次调用,都会使用同一个实例化的对象;每次都用同一个对象;InstancePerDependency:默认模式,每次调用,都会重新实例化对象;每次请求都创... 查看详情

设计模式学习之:装饰器模式(代码片段)

最近在总结学习JavaI/O相关知识点,I/O应用的场景比较多,不仅存在各种I/O源端和想要与之通信的接收端(文件、控制台、网络链接等),而且还需要支持多种不同方式的通信(顺序、随机存取、缓冲、二进制、按字符、按行、按字... 查看详情

设计模式学习之抽象工厂模式

抽象工厂模式定义:Provideaninterfaceforcreatingfamiliesofrelatedordependentobjectswithoutspecifyingtheirconcreteclasses.                查看详情

23种设计模式学习之桥接模式

接口publicinterfaceSource{voidmethod1();} 实现一publicclassSourceImpimplementsSource{@Overridepublicvoidmethod1(){System.out.println("1111111");}} 实现二publicclassSourceImplimplementsSource{@Overri 查看详情