基于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的设计模式之组合模式
概念 将所有对象组合成一种树形结构,有分支节点.叶子节点,分支节点可以有自己的子节点,子节点可以是分支节点.叶子节点,可以进行增删的操作,而叶子节点不可以.比如文件夹就是一个分支节点,而文件就是一个叶 ...
随机推荐
- ACM学习历程—HDU1719 Friend(数论)
Description Friend number are defined recursively as follows. (1) numbers 1 and 2 are friend number; ...
- mysql数据库---编码格式基本操作
1.查看数据库编码格式 mysql> show variables like 'character_set_database'; 2.查看数据表的编码格式 mysql> show crea ...
- window系统的HOST详解
很多用户都知道在Window系统中有个Hosts文件(没有后缀名),在Windows 98系统下该文件在Windows目录,在Windows 2000/XP系统中位于C\Winnt\System32 ...
- 国标28181sip开源库介绍(陆续补充完备)
(1)osip一个基于 osip 库的 UAC 和 UAS 的代码整理http://blog.csdn.net/aflyeaglenku/article/details/51601270(2)pjsi ...
- 【转】STL中的set容器的一点总结
转自 http://www.cnblogs.com/BeyondAnyTime/archive/2012/08/13/2636375.html 1.关于set C++ STL 之所以得到广泛的赞誉,也 ...
- stm32之存储系统
一.STM32系统结构 要想深刻理解STM32的存储器,需要首先知道STM32的系统结构. 如Figure 1,是STM32系统结构框图. 根据STM32 Reference manual (RM00 ...
- css使图片变成黑白效果
-webkit-filter: grayscale(%); -moz-filter: grayscale(%); -ms-filter: grayscale(%); -o-filter: graysc ...
- CodeForces 1097G. Vladislav and a Great Legend
题目简述:给定$n \leq 10^5$个节点的树$T = (V, E)$,令$X \subseteq V$表示一个非空节点集合,定义$f(X)$为包含$X$的最小子树的边数.求 $$ \sum_{\ ...
- 《Java多线程编程核心技术》读后感(十三)
类InheritableThreadLocal的使用 使用类InheritableThreadLocal可以在子线程中取得父线程继承下来的值 值继承 package Third; import jav ...
- day9http协议
Http协议入门 2.1 什么是http协议 http协议: 对浏览器客户端 和 服务器端 之间数据传输的格式规范 2.2 查看http协议的工具 1)使用火狐的firebug插件(右键->f ...