JavaSE-单例模式初学

package com.btp.t2;
/*
 * 设计模式:大量的实践中总结和理论化之后优选的代码结构,编程风格和解决问题的
 * 思考方式
 * 23种设计模式
 *
 * 单例的设计模式:
 * 1.解决的方法:使得一个类只能够创建一个对象
 * 2.具体步骤:①私有化构造器,使得在类的外部不能调用此构造器
 *            ②在类的内部创建一个类的实例
 *            ③私有化此对象,通过公共方法来调用
 *            ④此公共的方法,只能通过类来调,所以设置为static,同时类的实例instance
 *            也必须是static的
 *
 *1.饿汉式:不管用不用,对象都创建了:private static Singleton instance=new Singleton();
 *2.懒汉式:用对象的时候才创建,不用就不创建:private static Singleton1 instance=null;
 *         instance=new Singleton1();
 */

public class TestSingleton {

    public static void main(String[] args) {
        //饿汉式
        /*Singleton s1=Singleton.getInstance();
        Singleton s2=Singleton.getInstance();
        System.out.println(s1 == s2);//true*/

        //懒汉式
        Singleton1 s3=Singleton1.getInstance();
        Singleton1 s4=Singleton1.getInstance();
        System.out.println(s3 == s4);//true,因为只有一个对象,所有引用指向同一片堆内存

    }

}

//只能创建单个实例

//饿汉式:在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。
class Singleton
{
    //1.私有化构造器,使得在类的外部不能调用此构造器
    private Singleton()
    {

    }
    //2.在类的内部创建一个类的实例
    private static Singleton instance=new Singleton();

    //3.私有化此对象,通过公共方法来调用
    //4.此公共的方法,只能通过类来调,所以设置为static,同时类的实例instance也必须是static的
    public static Singleton getInstance()
    {
        return instance;
    }
}

//懒汉式:可能存在线程安全问题
class Singleton1
{
    //1.私有化构造器
    private Singleton1()
    {

    }

    //2.声明私有对象
    private static Singleton1 instance=null;

    //3.创建调用本类私有对象的方法,调用这个方法的时候才真正创建对象
    public static Singleton1 getInstance()
    {
        if(instance == null)
        {
            instance=new Singleton1();
        }
        return instance;
    }

}
时间: 2024-10-25 18:05:27

JavaSE-单例模式初学的相关文章

C#初学单例模式

版本1:最简单的单例模式 public class MySingleton { private MySingleton() //构造函数,注意private { } private static MySingleton _Entity = null; //私有字段 public static MySingleton Entity //公共属性 { get { if (_Entity == null) //确保只能创建一次对象 { MySingleton._Entity = new MySingl

java小白 初学单例模式之饿汉模式(望各位大佬多多指点)

单例模式的作用 就是只能创建一个对象 步骤 第一步 创建一个用私有的,静态的当前类的对象,代码如下 private static Dog dog = new Dog();(注意这里首先创建了一个Dog类的对象) 第二步 创建一个私有的,无参的构造方法,代码如下 private Dog(){} 第三步 写一个静态的,参数为当前类的一个get方法,其实就是调用这个方法创建对象,代码如下 public static  Dog  getDog(){ return  Dog; } 原文地址:https:/

初学JavaSE

Java简介 Java面向对象程序设计语言和Java平台的总称. Java常用术语介绍 JVM:java虚拟机,它是整个java实现跨平台的 最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可 以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解 释给本地系统执行. JRE:java运行环境.光有JVM还不能成class的 执行,因为在解释class的时候JVM需要调用解释所需要的类库lib. 在JD

JavaSE配置文件java.util.Properties【单例模式Singleton】

PropertyMgr.java 1 package config; 2 3 import java.io.IOException; 4 import java.util.Properties; 5 6 public class PropertyMgr { 7 8 private static final Properties props = new Properties(); 9 10 static { 11 try { 12 props.load(PropertyMgr.class.getC

初学设计模式之单例模式

1 class Singleton 2 { 3 private: 4 int data; 5 static Singleton *singletonInstance; 6 Singleton():data(0) 7 { 8 9 }; 10 Singleton(const Singleton &singleton) 11 { 12 data=singleton.data; 13 singletonInstance=singleton.singletonInstance; 14 }; 15 Sing

初学javase(1)

java核心机制java虚拟机(jvm) java是编译型语言还是解释型语言? 编译型语言:先将代码编译为机器代码,再加以运行 .解释型语言:由解释器将代码一句一句运行.即时编译技术,已经缩小了这两种语言间的差距.这种技术混合了编译语言与解释型语言的优点,它像编译语言一样,先把程序源代码编译成字节码.到运行期时,再将字节码直译,之后运行.Java与LLVM是这种技术的代表产物. 原文地址:https://www.cnblogs.com/hh4806/p/12128735.html

C#设计模式(1)——单例模式

一.引言 最近在设计模式的一些内容,主要的参考书籍是<Head First 设计模式>,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了帮助我更深入地理解设计模式,二同时可以给一些初学设计模式的朋友一些参考.首先我介绍的是设计模式中比较简单的一个模式——单例模式(因为这里只牵涉到一个类) 二.单例模式的介绍 说到单例模式,大家第一反应应该就是——什么是单例模式?,从“单例”字面意思上理解为——一个类只有一个实例,所以单例模式也就是保证一个类只

javase基础

目录 目录... 1 第一天... 5 1:计算机概述(了解) 5 2:键盘功能键的认识和快捷键(掌握) 5 3:常见的DOS命令(掌握) 6 4:Java语言概述(了解) 6 5:JDK,JRE,JVM的作用及关系(掌握) 7 6:JDK的下载,安装,卸载(掌握) 7 7:第一个程序:HelloWorld案例(掌握) 7 8:常见的问题(掌握) 8 9:path环境变量(掌握) 8 10:classpath环境变量(理解) 8 第二天... 10 1:关键字(掌握) 10 2:标识符(掌握)

JavaSE中==和equals使用

之所以写这篇博客,是因为在学习JavaSE的时候遇到了一个问题,由解决问题延伸到该类问题的总结,大概讲讲解决这个问题的思路: 首先先说说" == "吧,java中的"=="表示比较值.对基本数据类型来说,"=="就是比的值,这没有什么疑问:主要说的就是对于引用数据类型"=="比较的就不是对象的值了,而是对象的地址!!! 这似乎也没有什么可以说的,但是,对于引用类型中的包装类而言,由于他们具有自动装箱和自动拆箱的特点,使得初学的

深刻理解Java中单例模式的实现

在之前的学习笔记中已经写了一篇关于单例模式的几种不同实现.这篇文章主要是对之前的那篇笔记的补充和加深. · 在Java语言中使用单例模式能够带来的好处: (1):对于频繁使用的对象,可以省略创建对象那个所花费的时间,尤其是那些重量级对象的创建,对于重量级对象的创建那可是一笔相当可观的系统开销. (2):由于new操作的次数减少了,进一步产生的益处就是,对系统内存的使用频率也会降低了,那么这一举措将会减轻GC压力,缩短GC停顿时间. 以上的这两点都为系统性能的优化带来了改善. 单例模式的实现: 简