【Java学习笔记】21:单实例设计模式
来源:互联网 发布:淘宝以前的订单消失了 编辑:程序博客网 时间:2024/06/01 10:50
单实例(单例):即一个类只能产生一个实例,在有些时候这样设计是必要的。
如果构造方法是public类型,那么用户可以任意地用它来构造实例,显然不能保证单例的要求。
package t1;public class test { public static void main(String[] args) { NotSingleton n1=new NotSingleton(); NotSingleton n2=new NotSingleton(); }}class NotSingleton{ public NotSingleton(){ //构造器 }}
所以首先要保证构造方法是私有的。
因此考虑用自己实例化自己的方式,因为还没有创建对象,所以要提供一个暴露给外部的静态方法,通过外部调用这个静态方法来创建实例。
package t1;public class test { public static void main(String[] args) { //尝试创建两个实例对象 NotSingleton n1=NotSingleton.GetInstance(); NotSingleton n2=NotSingleton.GetInstance(); //测试这两个对象是否相等 System.out.println(n1==n2); }}class NotSingleton{ //构造器 private NotSingleton(){ } //用于自己实例化自己的静态方法 public static NotSingleton GetInstance() { return new NotSingleton(); }}
运行的结果是false,说明这两个对象还是不同。这是因为每次调用时都new了一个新的NotSingleton对象,因此不妨在类体内创建好这个对象,每次调用静态方法时都判断一下对象是否已经存在。
因为静态的方法不能访问非静态的对象,所以这个对象也要做成静态的。
package t1;public class test { public static void main(String[] args) { //尝试创建两个实例对象 NotSingleton n1=NotSingleton.GetInstance(); NotSingleton n2=NotSingleton.GetInstance(); //测试这两个对象是否相等 System.out.println(n1==n2); }}class NotSingleton{ //构造器 private NotSingleton(){ } private static NotSingleton Instance; //用于自己实例化自己的静态方法 public static NotSingleton GetInstance() { if(Instance==null) { Instance=new NotSingleton(); } return Instance; }}
运行的结果为true。上面的方式被称为懒汉模式,即先创建Instance但不实例化它,等到调用静态方法GetInstance()时再判断要不要做实例化。
与之相对的还有饿汉模式,即先做实例化,在静态方法中只要直接返回实例即可。
package t1;public class test { public static void main(String[] args) { //尝试创建两个实例对象 NotSingleton n1=NotSingleton.GetInstance(); NotSingleton n2=NotSingleton.GetInstance(); //测试这两个对象是否相等 System.out.println(n1==n2); }}class NotSingleton{ //构造器 private NotSingleton(){ } private static NotSingleton Instance=new NotSingleton(); //用于自己实例化自己的静态方法 public static NotSingleton GetInstance() { return Instance; }}
运行的结果为true。
阅读全文
0 0
- 【Java学习笔记】21:单实例设计模式
- java 设计模式 学习笔记(16) 单例模式
- java设计模式学习笔记-单例模式
- java设计模式学习笔记1 单例模式
- 设计模式学习笔记---单例模式(Java版)
- Java设计模式学习笔记之单例模式
- Java学习笔记---设计模式之单例模式
- java学习笔记-设计模式之单例模式
- Java设计模式--单例模式学习笔记
- java设计模式学习笔记--单例模式
- 设计模式学习笔记(Java篇)之单例模式
- Java设计模式学习笔记,一:单例模式
- java设计模式_单例模式_学习笔记
- JAVA设计模式单实例模式
- java 设计模式学习笔记一 singleton单例
- 黑马程序员------java学习笔记之单例设计模式
- Java学习笔记 - 单例设计模式 (一)
- java个人学习笔记09(单例设计模式)
- null pointer exception
- 避免在设置中强制停止某一应用
- Azure上部署的资源公网连通性测试工具-paping
- 1.颜色空间缩减算法使用
- C. Star sky(Codeforces Round #427 (Div. 2) C)
- 【Java学习笔记】21:单实例设计模式
- 常用生物信息学格式介绍
- js页面跳转和新窗口打开
- Hello Mr.J——Docker
- Windows 10中Cisco VPN Client提示Reason 442: failed to enable virtual adapter
- TableView
- 把mongodb设置成windows服务
- 家庭媒体中心解决方案(二、家用中高端路由器及NAS介绍)
- 用pip安装报 invalid token问题