基于JAVA的设计模式之单例模式
- 概念
于大二上学期面向对象C++期中考试中有这么道题:一个Computer有多个USB插口,那么意味着这台电脑可以插多个鼠标,但是无论你如何拔插多少个鼠标,桌面上的鼠标一直只显示一个,且多个硬件鼠标都可以操控这个桌面上的鼠标,就这个场景进行程序设计。当时由于没有接触过设计模式当场就蒙蔽了,现在想起来较为简单。
单利模式保证内存中有且仅有一个对象,对内私有化构造函数,对外提供静态的获取对象引用的方法。
- 饿汉模式:顾名思义形容很饥饿,迫不及待的获取对象。通过加载类的时候就已经为对象分配了内存。对外提供一个公有的静态方法,由于静态方法内部成员必须静态的,所以instance必须也是静态的且不可改变的。
//饿汉模式
public class Mouse {
private String name;
private Mouse(){
System.out.println("初始化对象");
}
private static final Mouse instance=new Mouse();
public static Mouse getInstance(){
return instance;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void load(){}
} public class Main {
public static void main(String[] args) {
//Mouse mouse1=Mouse.getInstance();
//mouse1.setName("鼠标");
//Mouse mouse2=Mouse.getInstance();
//System.out.println(mous/e1.getName()+":"+mouse2.getName());
//鼠标:鼠标
Mouse.load();
}
}
- 懒汉模式:懒汉模式顾名思义就如同一个很懒的人,用到的时候才去准备,总是临时抱佛脚。用到对象的时候才去为对象分配内存。
//懒汉模式
public class Mouse {
private String name;
//去掉final
private static Mouse instance=null;
public static Mouse getInstance(){
if(instance==null){
instance=new Mouse();
}
return instance;
}
private Mouse(){
System.out.println("初始化对象");
}
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}
- 懒汉模式与饿汉模式的区别
创建对象的时机不同,饿汉是加载类时就创建,用load()方法证明了,懒汉是随用随创建,这就导致了饿汉模式造成了内存浪费。但是懒汉模式在多线程的情况下,由于判空条件(if instance == null)就会导致对象的不唯一性发生
- 懒汉模式在多线程的应用
public static synchronized Mouse getInstance(){
if(instance==null){
instance=new Mouse();
}
return instance;
}
public static Mouse getInstance(){
synchronized (Mouse.class) {
if (instance == null) {
instance = new Mouse();
}
}
return instance;
}
基于JAVA的设计模式之单例模式的更多相关文章
- Java与设计模式之单例模式(下) 安全的单例模式
关于单例设计模式,<Java与设计模式之单例模式(上)六种实现方式>介绍了6种不同的单例模式,线程安全,本文介绍该如何保证单例模式最核心的作用——“实现该模式的类有且只有一个实 ...
- 基于java的设计模式入门(1)——为什么要学习设计模式
大年初一,楼主在这里给大家拜年,祝大家码上升职加薪,码上有对象结婚,码上有车有房,幸福安康. 过完年,回学校注册报道之后,大概就要回深圳到公司开始实习了.提高自己,无非就有两种方式,一是看书学习,二是 ...
- Java与设计模式之单例模式(上)六种实现方式
阎宏博士在<JAVA与模式>中是这样描述单例模式的:作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. ...
- Java常见设计模式之单例模式
1.何为单例模式? 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的 ...
- 《java常用设计模式之----单例模式》
一.简介 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该类负责创 ...
- java基础设计模式1——单例模式
概念:在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为. 单例模式从实现上可以分为饿汉式单例和懒汉式单例两种,前者天生 ...
- 基于JAVA的设计模式之代理模式
概念 王宝强有一个经纪人叫宋喆,这个经纪人很吊,可以代理王宝强做一系列的事情,与粉丝活动.王宝强的微博维护.安排王宝强的行程以及什么什么等等.如果王宝强一个人做岂不是累死.通过这个代理人为王宝强节省了 ...
- 基于JAVA的设计模式之适配器模式
适配器模式概念 适配器模式把一个类的接口变换成客户端所期待的另一个接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作.比如我们突然就想看电影了,但是这个电影是AVI格式的,目前我们开发 ...
- 基于JAVA的设计模式之组合模式
概念 将所有对象组合成一种树形结构,有分支节点.叶子节点,分支节点可以有自己的子节点,子节点可以是分支节点.叶子节点,可以进行增删的操作,而叶子节点不可以.比如文件夹就是一个分支节点,而文件就是一个叶 ...
随机推荐
- django-crontab 定时执行任务方法
需求 每天请求一封邮件,并读取该邮件 这个其实可以使用linux 自带了crontab实现,但是毕竟是django 开发.想着不知道有没有方法可以从django 中实现. 简单搜索了下,这方面的方法确 ...
- 规划ASM DISK GROUP、查看asm 磁盘当前状态、mount or dismount 磁盘组、检查磁盘组 metadata 的内部一致性
规划ASM DISK GROUP: 1. 每个磁盘组里的磁盘应该大小.性能.新旧等一致,不能有太大差距 2. 对database files 和 fast recovery area 分别创建不同的d ...
- C# 使用 StreamWriter 写入数据
NetworkStream 类.MemoryStream类 和 FileStream 类都提供了以字节为基本单位的读写方法,但是这种方法首先将待写入的数据转换为字节序列后才能进行读写,当操作的是使用字 ...
- npm下载模块提速方法
通过config配置指向国内镜像源,命令如下 npm config set registry https://registry.npm.taobao.org 然后可以查看是否配置成功 npm conf ...
- SVN needs-lock 设置强制只读属性【转】
https://www.jianshu.com/p/5942ab19620b 设置后向svn服务器添加文件时,会自动带上svn:needs-lock属性,默认是只读的要签出才能修改,以避免不必要的编辑 ...
- Photoshop CC 智能切图功能介绍
http://gdc.qq.com/ http://gdc.qq.com/?p=4445
- 51nod1117【贪心】
思路:哈夫曼树~~哇塞,那么有道理. 利用堆维护:每次从堆里取两个最小加起来,然后还是最小的两个,最后只剩一根总的 #include <bits/stdc++.h> using names ...
- solidity 学习笔记 2 (二维数组)
solidity 二维数组: pragma solidity ^0.4.23; contract twoArray{ uint[2][3] grade =[[20,30],[40,50],[45,60 ...
- 洛谷 P1875 佳佳的魔法药水
P1875 佳佳的魔法药水 题目描述 发完了 k 张照片,佳佳却得到了一个坏消息:他的 MM 得病了!佳佳和大家一样焦急 万分!治好 MM 的病只有一种办法,那就是传说中的 0 号药水 --怎么样才能 ...
- SpringBoot2.0 基础案例(14):基于Yml配置方式,实现文件上传逻辑
本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.文件上传 文件上传是项目开发中一个很常用的功能,常见的如头像上 ...