JAVA_Basis -- 5 单例设计模式

数字霜焰渡
• 阅读 1056

1 java中的23中设计模式

JAVA_Basis -- 5 单例设计模式
java程序设计中的23中设计模式是java语言开发过程中开发者凭借多年的开发经验总结出来的,其本质是对面向对象设计原则的实际运用,是对java语言中对类的封装性,继承性,多态性,类的关联关系和组合关系的深入理解。

2 单例设计模式

单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例(类似于服务管理器),Spring默认创建的Bean就是单例模式。其特点是保证一个对象只有一个,具有节约系统空间,控制资源使用的优点。

2.1 案例分析

package com.mtingcat.javabasis.singletondesignpattern;

/**
 * Every Java application has a single instance of class
 * <code>Runtime</code> that allows the application to interface with
 * the environment in which the application is running. The current
 * runtime can be obtained from the <code>getRuntime</code> method.
 * <p>
 * An application cannot create its own instance of this class.
 *
 * @author  unascribed
 * @see     java.lang.Runtime#getRuntime()
 * @since   JDK1.0
 */
public class Runtime {
    /**
     * 全局唯一对象
     */
    private static Runtime currentRuntime = new Runtime();

    /**
     * Returns the runtime object associated with the current Java application.
     * Most of the methods of class <code>Runtime</code> are instance
     * methods and must be invoked with respect to the current runtime object.
     *
     * @return  the <code>Runtime</code> object associated with the current
     *          Java application.
     * 通过自定义的静态方法获取实例
     */
    public static Runtime getRuntime() {
        return currentRuntime;
    }

    /** Don't let anyone else instantiate this class 私有化*/
    private Runtime() {}
}

2.2 创建方式

JAVA_Basis -- 5 单例设计模式

饿汉式

JAVA_Basis -- 5 单例设计模式
饿汉式的主要特点是类会提前把对象创建好,给你提供get()方法,返回已经创建好的对象。
结构控制:
① 私有化构造方法,使得外界无法创建对象,保证对象的唯一性。
② 类内部直接创建好对象,使用static关键字修饰,外界直接使用类名称拿到。
③ 提供get()方法返回创建好的对象,使用static关键字修饰(静态只能调用静态)。
JAVA_Basis -- 5 单例设计模式

package com.mtingcat.javabasis.singletondesignpattern;

public class SingleDemo01 {
    public static void main(String[] args) {
        Single a = Single.get();
        Single b = Single.get();
        
        
        System.out.println(a==b);
        System.out.println(a);
        System.out.println(b);
    }

}

class Single{
    /**
     * 私有化构造方法,要想创建对象就只能通过Single类
     */
    private Single(){}
    
    /**
     * 在类内部直接创建好对象
     */
    static private Single s = new Single();
    
    /**
     * 对外只提供一个get方法,放回的是已经创建好的对象
     * 用static修饰使得外界不通过对象访问而是直接通过类名访问
     * @return
     */
    static public Single get(){
        return s;
    }
}
懒汉式

JAVA_Basis -- 5 单例设计模式
饿汉式的主要特点是类会提前声明要创建对象,但是还没有创建,给你提供get()方法,当调用get()方法的时候才会创建,并且只会创建一次(第一次)。
结构控制:
① 私有化构造方法,使得外界无法创建对象,保证对象的唯一性。
② 类内部直接创建好对象,使用static关键字修饰,外界直接使用类名称拿到。
③ 提供get()方法返回创建好的对象,使用static关键字修饰(静态只能调用静态)。
JAVA_Basis -- 5 单例设计模式

package com.mtingcat.javabasis.singletondesignpattern;

public class SingleDemo02 {
    public static void main(String[] args) {
        Single02 a = Single02.get();
        Single02 b = Single02.get();
        
        
        System.out.println(a==b);
        System.out.println(a);
        System.out.println(b);
    }

}

class Single02{
    /**
     * 私有化构造方法,要想创建对象就只能通过Single类
     */
    private Single02(){}
    
    /**
     * 在类内部直接创建好对象
     */
    static private Single02 s = null;
    
    /**
     * 对外只提供一个get方法,放回的是已经创建好的对象
     * 用static修饰使得外界不通过对象访问而是直接通过类名访问
     * @return
     */
    synchronized static public Single02 get(){
        if(s==null){
            s=new Single02();
        }
        return s;
    }
}
点赞
收藏
评论区
推荐文章
3A网络 3A网络
3年前
Golang 常见设计模式之单例模式
之前我们已经看过了Golang常见设计模式中的装饰和选项模式,今天要看的是Golang设计模式里最简单的单例模式。单例模式的作用是确保无论对象被实例化多少次,全局都只有一个实例存在。根据这一特性,我们可以将其应用到全局唯一性配置、数据库连接对象、文件访问对象等。Go语言实现单例模式的方法有很多种,下面我们就一起来看一下。饿汉式饿汉式实现单例模式非
Wesley13 Wesley13
4年前
java 23种设计模式(五、单例模式)
作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。单例模式的结构  单例模式的特点:单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。  饿汉式单例类publicclassEagerSingleton
Wesley13 Wesley13
4年前
java中饿汉与懒汉的故事(单例设计模式)
java中的单例设计模式关于设计模式,这其实是单独存在的东西,它不属于java,但是在java中使用较多,所以今天我就给大家介绍下单例设计模式中的饿汉和懒汉这俩朴素的打工人。首先我先说明下单例设计模式是啥(如果不想了解,可以直接划下去看饿汉和懒汉):类的单例设计模式就是采用一定的方法保证在整个软件系统中,对某个类只能存在一
Wesley13 Wesley13
4年前
JAVA设计模式之单例设计模式
    单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。  在JAVA中实现单例,必须了解JAVA内存机制,JAVA中实例对象存在于堆内存中,若要实现单例,必须满足两个条件:  1.限制类实例化对象。即只能产生一个对象。
Wesley13 Wesley13
4年前
Java技术学习路线图
一:常见模式与工具学习Java技术体系,设计模式,流行的框架与组件是必不可少的:常见的设计模式,编码必备Spring5,做应用必不可少的最新框架MyBatis,玩数据库必不可少的组件!实用的Java后端路线图(月薪40k)(https://oscimg.oschina.net/oscnet/dcbfc5de0fd4
Wesley13 Wesley13
4年前
(面试常问)4种单例设计模式的总结(内含代码以及分析)
单例设计模式:  单例模式,是一种常见的软件设计模式.在它的核心结构中只包含了一个被称为单例的特殊类.通过单例模式可以保证系统中只有该类的一个实例对象.优点:  实例控制:单例模式会阻止其它对象实例化其自己的单例对象的副本,从而确保所有对象都访问的是唯一的实例   灵活性:因为类控制了实例化过程,所以类可以很灵活的更改实
Wesley13 Wesley13
4年前
Java设计模式:Singleton(单例)模式
概念定义Singleton(单例)模式是指在程序运行期间,某些类只实例化一次,创建一个全局唯一对象。因此,单例类只能有一个实例,且必须自己创建自己的这个唯一实例,并对外提供访问该实例的方式。单例模式主要是为了避免创建多个实例造成的资源浪费,以及多个实例多次调用容易导致结果出现不一致等问题。例如,一个系统只能有一个窗口管理器或文件系统,一个程
Wesley13 Wesley13
4年前
23种设计模式(1):单例模式
定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。类型:创建类模式类图:!23种设计模式(1):单例模式第1张|快课网(http://static.oschina.net/uploads/img/201407/05200605_0dij.gif"23种设计模式(1):单例模式
Wesley13 Wesley13
4年前
Java中23种设计模式详解
Java中23种设计模式1\.设计模式31.1创建型模式41.1.1工厂方法41.1.2抽象工厂61.1.3建造者模式101.1.4单态模式131.1.5原型模式151.2结构型模式171.2.1适配器模式171.2.2桥接模式191.2.3组合
Wesley13 Wesley13
4年前
JavaWeb之动态代理解决request请求编码问题
动态代理解决编码问题1.设计模式出现原因:软件开发过程中,遇到相似问题,将问题的解决方法抽取模型(套路)常见设计模式:单例,工厂,适配器,装饰者,动态代理。2.装饰者模式简单介绍谷歌汽车开发场景1.Java定义了汽车开发约定interfaceICar{s
Wesley13 Wesley13
4年前
Java中的设计模式
注:基于《Java高并发编程详解汪文君》、《深入理解JVM高级特性与最佳实践周志明》,以学习为目的,加上自身理解、验证。作为笔记,为加深印象,做到不复制,不粘贴。欢迎,大家一起交流学习。适配器模式如果当前类的接口不适用与客户端,那么把它转换为客户端所能接受的另一种接口就是适配器模式。从而使得两个接口不匹配而无法在一起工作的两个类能够在一起