java单例模式(饿汉式和懒汉式)
1 /*
2 * 设计模式:对问题行之有效的解决方式。其实它是一种思想。
3 *
4 * 1,单例设计模式
5 * 解决的问题:就是可以保证一个类在内容中的对象唯一性。
6 *
7 * 必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。
8 *
9 * 如何保证对象唯一性呢?
10 * 1,不允许其他程序用new创建该类对象。
11 * 2,在该类创建一个本类实例。
12 * 3,对外提供一个方法让其他程序可以获取该对象。
13 *
14 * 步骤:
15 * 1,私有化该类构造函数。
16 * 2,通过new在本类中创建一个本类对象。
17 * 3,定义一个公有的方法,将创建的对象返回。
18 */
19 //饿汉式 (开发)
20 class Single{//类一加载, 对象就已经存在了。
21 static Single s = new Single();
22 private Single() {}
23 public static Single getInstance() { //String name //给一个方法 可控
24 return s;
25 }
26 }
27 //懒汉式 存在一些问题:如果后期被多线程并发访问时可能保证不了对象唯一性,存在安全隐患。 (面试会问)
28 class Single2{//类加载进来,没有对象,只有调用了getInstance方法时,才会创建对象。
29 //延迟加载形式。
30 private static Single2 s = null;
31
32 private Single2() {}
33
34 public static Single2 getInstance() {
35 if(s == null) {
36 s = new Single2();
37 }
38 return s;
39 }
40 }
41 public class SingleDemo {
42 public static void main(String[] args) {
43 Single ss = Single.getInstance();
44 Single s1 = Single.getInstance();
45 Single s2 = Single.getInstance();
46 System.out.println(s1 == s2);
47 //Single ss = Single.s; //也可以但是不可控。
48 Test t1 = Test.getInstance();
49 Test t2 = Test.getInstance();
50 t1.setNum(10);
51 t2.setNum(20);
52 System.out.println(t1.getNum());
53 System.out.println(t2.getNum());
54 }
55 }
56 class Test{
57 private int num;
58 //保证唯一性加入下面三句;
59 private static Test t = new Test();
60 private Test() {}
61 public static Test getInstance() {
62 return t;
63 }
64 public void setNum(int num) {
65 this.num = num;
66 }
67 public int getNum() {
68 return num;
69 }
70
71 }
java单例模式(饿汉式和懒汉式)的更多相关文章
- Singleton模式(单例模式) 饿汉式和懒汉式
目的:整个应用中有且只有一个实例,所有指向该类型实例的引用都指向这个实例. 好比一个国家就只有一个皇帝(XXX),此时每个人叫的“皇帝”都是指叫的XXX本人; 常见单例模式类型: 饿汉式单例:直接将对 ...
- Java中单例设计模式,饿汉式和懒汉式
Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯 ...
- Java中如果把构造方法也私有化,如何创建对象?Java的单例设计模式——饿汉式和懒汉式区别
Java的单例模式——饿汉式 package com.swift; //Java单例设计模式——恶汉式 public class SinglePerson { private String name= ...
- Java 单例设计模式之 饿汉式和懒汉式
public class InstanceSampleTest { public static void main(String[] args) { /** 单例设计模式的 饿汉式和懒汉式 * 单例模 ...
- Java面试 - 什么是单例设计模式,为什么要使用单例设计模式,如何实现单例设计模式(饿汉式和懒汉式)?
什么是单例设计模式? 单例设计模式就是一种控制实例化对象个数的设计模式. 为什么要使用单例设计模式? 使用单例设计模式可以节省内存空间,提高性能.因为很多情况下,有些类是不需要重复产生对象的. 如果重 ...
- java基础10 单例模式之饿汉式和懒汉式单例
前言: 软件行业中有23中设计模式 单例模式 模版模式 装饰者模式 观察者模式 工厂模式 ........... 单例模式 1. 单例模式包括 1.1 饿汉式单例 1.2 ...
- 设计模式:单例模式介绍及8种写法(饿汉式、懒汉式、Double-Check、静态内部类、枚举)
一.饿汉式(静态常量) 这种饿汉式的单例模式构造的步骤如下: 构造器私有化:(防止用new来得到对象实例) 类的内部创建对象:(因为1,所以2) 向外暴露一个静态的公共方法:(getInstance) ...
- java核心知识点学习----equals和==的比较、单例模式,饿汉式,饱汉式
最近发现自己学习能力变慢了,想来想去还是发现是因为自己Java基础没有打扎实,接下来的一系列文章将主要记录自己对于Java的最基础知识点的学习. 一.equals和==的比较 先看例子: packag ...
- C#单例---饿汉式和懒汉式
单例模式: 步骤: 1.定义静态私有对象 2.构造函数私有化 3.定义一个静态的,返回值为该类型的方法,一般以Getinstance/getInit为方法名称 单例模式有懒汉和饿汉,最好使用饿汉 1. ...
随机推荐
- JAVA比较指定的两个日期
判断指定日期是否在某个日期内 public static SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); p ...
- JAVA获取当前日期指定月份后(多少个月后)的日期
环境要求:使用jdk1.8 package com.date; import java.text.ParseException; import java.text.SimpleDateFormat; ...
- 【Tools】VS搭建Qt开发环境
00. 目录 @ 目录 00. 目录 01. 概述 02. Visual Studio 2019安装 03. Qt6安装 04. qt-vsaddin插件下载 05. qt-vsaddin插件安装 0 ...
- 【LeetCode】728. Self Dividing Numbers 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 循环 filter函数 数字迭代 日期 题目地址:h ...
- 【LeetCode】395. Longest Substring with At Least K Repeating Characters 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/longest- ...
- 【LeetCode】337. House Robber III 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 编写Java程序,通过给定可变参数方法,计算任意给定的多个int类型数据之和
返回本章节 返回作业目录 需求说明: 通过给定可变参数方法,计算任意给定的多个int类型数据之和. 实现思路: 定义可变形参方法,参数类型是int类型. 定义变量 sum 接受最终的和. 通过 for ...
- 『无为则无心』Python函数 — 30、Python变量的作用域
目录 1.作用于的概念 2.局部变量 3.全局变量 4.变量的查找 5.作用域中可变数据类型变量 6.多函数程序执行流程 1.作用于的概念 变量作用域指的是变量生效的范围,在Python中一共有两种作 ...
- Android 摄像头预览悬浮窗,可拖动,可显示在其他app上方
市面上常见的摄像头悬浮窗,如微信.手机QQ的视频通话功能,有如下特点: 整屏页面能切换到一个小的悬浮窗 悬浮窗能运行在其他app上方 悬浮窗能跳回整屏页面,并且悬浮窗消失 我们探讨过用CameraX打 ...
- Flask + UnitTest(十五)
被测试视图 # coding:utf-8 from flask import Flask, request, jsonify app = Flask(__name__) @app.route(&quo ...