设计模式之单例模式
来源:互联网 发布:键盘操作记录软件 编辑:程序博客网 时间:2024/05/29 13:05
设计模式的概念
在软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由埃里希·伽玛(Erich Gamma)等人在1990年代从建筑设计领域引入到计算机科学的。
设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。面向对象设计模式通常以类或对象来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类或对象。设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力。
单例模式可能是设计模式中运用最多的模式了,顾名思义,单例模式就是只保证一个类只有一个实例对象,并提供一个访问它的全局接口。
那么怎样才能保证一个类只有一个实例对象呢?在java中自然想到通过static 修饰符来保证变量是全局的。
如何提供一个访问它的全局接口呢?很显然可以定义一个类方法,并隐藏该类的构造方法。
单例模式一般两种写法,一种称为懒汉式另一种称为饿汉式,两者主要区别懒汉式存在线程不安全问题,而饿汉式不存在此问题。
懒汉式样例代码
public class Entity{ //全局对象 private static sInstance; //私有构造器,以保证访问该实例对象的入口只有一个 private Entity(){ //do something } //提供一个访问该实例对象的唯一入口 public static Entity getInstance(){ // if(sInstance == null){ sInstance = new Entity(); } return sInstance; } public void doAction(){ //doing something }}public class MainTest{ public static void main(String[] args){ //创建一个Entity对象 Entity globalInstance = Entity.getInstance(); //调用类Entity中的相关方法 globalInstance.doAction(); }}
说明:上述又叫懒汉式,顾名思义就是只有等到需要对象时才会去创建,但懒汉式存在线程不安全问题,多个线程调用时可能会创建两个对象哦。
饿汉式样例代码
public class Entity{ //全局对象,类第一次加载时就会创建对象 private static final sInstance = new Entity(); //私有构造器,以保证访问该实例对象的入口只有一个 private Entity(){ //doing something } //提供一个访问该实例对象的唯一入口 public static Entity getInstance(){ return sInstance; } public void doAction(){ //doing something }}public class MainTest{ public static void main(String[] args){ //创建一个Entity对象 Entity globalInstance = Entity.getInstance(); //调用类Entity中的相关方法 globalInstance.doAction(); }}
说明:饿汉式保证了对象全局且只有一个且线程安全。
0 0
- 设计模式之 单例设计模式
- 设计模式之 单例设计模式
- 设计模式之单例设计模式
- 设计模式之-----------单例设计模式
- 设计模式之:单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之-单例设计模式
- 设计模式之单例设计模式 标签: 设计模式
- 设计模式之单例
- 设计模式之单例
- 设计模式之 单例
- DWR如何获得返回对象
- 第十二周项目4-点、圆的关系
- Maven实战——远程仓库的配置
- 第十一周项目1-是春哥啊
- unmapbam to fastq和自己的annovar格式~~~
- 设计模式之单例模式
- Java NIO 01=====概述
- android实现层级式导航
- 教师兼干部类
- 第七课,分支结构程序体验|三个整数输出最大值
- 启动Eclipse 弹出Failed to load the JNI shared library 的解决方法
- 百度之星 2015 初赛(2) 1003 棋盘占领
- javascript && 和 || 最清晰的描述
- DOM节点——JS总结