单例模式:Instance
前言:
学习面向对象程序设计的朋友应该知道,我们大多数情况下通过 new 操作来实例化对象的。对于一些仅需要一次初始化的对象来说,频繁的new操作无疑会过多浪费内存空间。基于此,单例模式便应运而生了。所谓单例,即"一次初始化,多次操作"。那么本文就介绍一下自己封装一个支持单例的类的主要步骤。
实现单例的3个要点:
·静态化实例;
·将构造方法封装为private;
·对外提供一个公开的getInstance()方法。
代码实现:
package com.modelDesign.instance;public class Person {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}private Person(){}private static Person pp=new Person();public static Person getInstance(){return pp;}}
客户端测试程序:
package com.modelDesign.instance;public class TestPerson {public static void main(String[] args) {Person p1 = Person.getInstance();p1.setName("Jack");Person p2 = Person.getInstance();System.out.println("是否单例:"+(p1==p2));System.out.println(p2.getName());} }
测试结果:
补充:
当你设计的应用涉及到多线程时,上面的代码还是有瑕疵的。由于线程与线程之间的冲突,很可能会造成多次初始化。由此,我们引入多线程的锁——Lock加以解决。
适应多线程的单例实现:
package com.modelDesign.instance;import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock;public class InstanceSuper {private static InstanceSuper instance;private static Lock lock=new ReentrantLock();private InstanceSuper() {}public static InstanceSuper getInstance(){if(instance==null){lock.lock();if(instance==null){instance = new InstanceSuper();}lock.unlock();}return instance;}}
注意:测试类不要包含在单例类中,因为同一个类中私有的构造方法同样可以被其他方法调用,也就是说在main()函数进行new操作时不会报错!!
转载于:https://www.cnblogs.com/SeaSky0606/p/4719087.html
单例模式:Instance相关推荐
- 单例模式instance
单例模式是设计模式中最简单的模式了,它的目的是为了保证一个流程中只有一个对象存在,相当于一个全局变量. 1 单例模式的实现 创建一个类,调用者不能通过默认构造方法的方式创建实例,而是提供一个接口用来返 ...
- C++:单例模式 instance()
本文转载自:https://blog.csdn.net/Hackbuteer1/article/details/7460019 1.什么是单例模式? 在设计或开发中,肯定会有这么一种情况,一个类只能有 ...
- GOF23设计模式(创建型模式)单例模式
目录: 一:单例模式的核心作用.常见应用场景 二:五种单例模式及其实现 三:关于反射和反序列化破解单例模式的漏洞,以及相应的解决方案 四:测试五种单例模式的效率 一:核心作用及常见应用场景: 核心作用 ...
- java枚举类及面试题为什么枚举实现单例模式是安全的?
目录 枚举类 为什么会有枚举类? 枚举类的使用 枚举类的常用方法 枚举的构造 枚举类型能被反射吗? 为什么枚举实现单例模式是安全的? 枚举类的优缺点 枚举类 为什么会有枚举类? 假如说程序中有一些颜色 ...
- php中new意思,php 在一个类中new自己代表什么意思 ?是构造函数
一个类在他类方法new了本身 代表什么? 是构造函数?? 回复讨论(解决方案) new 类名 用于创建一个这个类的实例,这在哪里都一样,并没有使用上的差异 你的 DB 类声明了私有的构造函数,所以这个 ...
- php框架中数据库模型层原理,简单模拟ThinkPHP框架模型层对数据库的链式操作-Go语言中文社区...
在接口被实例化以后的每个方法中return 类本身就可以达到链式操作. 改善了写多行代码执行一次操作的缺点. 下面请看我的代码,若有疑问,请留言给我. class Instance{ public s ...
- 设计模式-创建者模式篇
设计模式 目录: 一.单例模式 二.工厂模式 三.抽象工厂模式 四.原型模式 五.建造者模式 注:学习视频:黑马程序员Java设计模式 创建者模式 创建型模式的主要关注点是"怎样创建对象?& ...
- Qt学习笔记:自定义窗体的移动+控件图标
在这里首先感谢刘大师的作品:Qt编写通用主界面导航(开源) 贴上演示: 本博客主要是研究了刘大师的作品然后自己总结,做点笔记..不喜勿喷~~~ 废话不多说,先贴出代码解析一下: AppInit::In ...
- 2018年上海后半年JAVA软件工程师面试真题
查询超过该部门员工大于3个的部门 SELECT deptid FROM table1 GROUP BY deptid HAVING COUNT(deptid) > 3 如果员工名称重复的部门id ...
- apollo 7.0——单例设计模式解析
文章目录 单例模式 饿汉模式 懒汉模式 线程不安全 单检锁 双检锁 Meyers 单例 apollo中单例模式 Instance 方法 CleanUp 方法 单例模式 三个要点: 提供对唯一实例的全局 ...
最新文章
- 3 用python进行OpenCV实战之画图(直线,矩形,圆形)
- php读取cookie文件,PHP读取CURL模拟登录时生成Cookie文件的方法,_PHP教程
- 基于深度学习的端到端人脸识别技术:全面调研
- wdpc搭建https网站
- python image convert_从python运行imagemagick convert(控制台应用程序)
- InfoQ —— 腾讯游戏大数据服务场景与应用
- 小米刷第三方recovery_小米平板4/Plus LTE版本开启电话功能
- ubuntu Django项目后台不挂断运行之screen命令
- java支持闭包_JAVA 需要引入闭包吗
- UINavigationBar颜色设置 用色码设置有误差
- 英语计算机考研复试专业翻译题库,计算机专业英语题题库.doc
- 宋朝人物第一,朱熹都说他是“天地间第一流人物”
- AD7705-模数转换器-工作原理介绍
- win7c盘空间越来越小_C盘空间越来越小怎么办,5个步骤无损扩容1招就搞定
- 四大列表控件之RadioButtonList控件(单选按钮)
- UEBA——通过用户画像识别安全威胁
- 完美解决api-ms-win-crt-runtime-l1-1-0.dll详细步骤
- BZOJ5473: 仙人掌
- 计算机软件里的字体,软件里面的字体大小
- 中关村被骗记(维权全过程)