当前位置: 首页 > news >正文

Android(java)学习笔记18:单例模式

单例模式代码示例:

1. 单例模式之饿汉式

 1 package cn.itcast_03;
 2 
 3 public class Student {
 4     // 构造私有
 5     private Student() {
 6     }
 7 
 8     // 自己造一个
 9     // 静态方法只能访问静态成员变量,加静态
10     // 为了不让外界直接访问修改这个值,加private
11     private static Student s = new Student();
12 
13     // 提供公共的访问方式
14     // 为了保证外界能够直接使用该方法,加静态,不加static,外界就必须创建一个对象,显然这里是不容许的
15     public static Student getStudent() {
16         return s;//这里是原子性操作,不是多条语句操作共享数据,所以开发的时候,我们用饿汉式,会比较安全(开发时候会常涉及到多线程)
17     }
18 }

 测试类:

 1 package cn.itcast_03;
 2 
 3 /*
 4  * 单例模式:保证类在内存中只有一个对象。
 5  * 
 6  * 如何保证类在内存中只有一个对象呢?
 7  *         A:把构造方法私有
 8  *         B: 在成员位置自己创建一个对象
 9  *         C: 通过一个公共的方法提供访问
10  */
11 public class StudentDemo {
12     public static void main(String[] args) {
13         // Student s1 = new Student();
14         // Student s2 = new Student();
15         // System.out.println(s1 == s2); // false
16 
17         // 通过单例如何得到对象呢?
18 
19         // Student.s = null;
20 
21         Student s1 = Student.getStudent();
22         Student s2 = Student.getStudent();
23         System.out.println(s1 == s2);
24 
25         System.out.println(s1); // null,cn.itcast_03.Student@175078b
26         System.out.println(s2);// null,cn.itcast_03.Student@175078b
27     }
28 }

 

2. 单例模式之懒汉式

 1 package cn.itcast_03;
 2 
 3 /*
 4  * 单例模式:
 5  *         饿汉式:类一加载就创建对象
 6  *         懒汉式:用的时候,才去创建对象
 7  * 
 8  * 面试题:单例模式的思想是什么?请写一个代码体现。
 9  * 
10  *         开发:饿汉式(是不会出问题的单例模式)
11  *         面试:懒汉式(可能会出问题的单例模式)
12  *             A:懒加载(延迟加载)    
13  *             B:线程安全问题
14  *                 a:是否多线程环境    是
15  *                 b:是否有共享数据    是
16  *                 c:是否有多条语句操作共享数据     是
17  */
18 public class Teacher {
19     private Teacher() {
20     }
21 
22     private static Teacher t = null;
23 
24     public synchronized static Teacher getTeacher() {
25         // t1,t2,t3
26         if (t == null) {//多条语句操作共享数据
27             //t1,t2,t3
28             t = new Teacher();
29         }
30         return t;
31     }
32 }

测试类:

 1 package cn.itcast_03;
 2 
 3 public class TeacherDemo {
 4     public static void main(String[] args) {
 5         Teacher t1 = Teacher.getTeacher();
 6         Teacher t2 = Teacher.getTeacher();
 7         System.out.println(t1 == t2);
 8         System.out.println(t1); // cn.itcast_03.Teacher@175078b
 9         System.out.println(t2);// cn.itcast_03.Teacher@175078b
10     }
11 }

 

3. 单例模式之双重锁定: 

思路很简单,就是我们只需要同步(synchronize)初始化instance的那部分代码从而使代码既正确又很有效率。 这就是所谓的“双检锁”机制(顾名思义)。 

 1 public class Singleton{  
 2   private static Singleton single;    //声明静态的单例对象的变量  
 3   private Singleton(){}    //私有构造方法   
 4     
 5   public static Singleton getSingle(){    //外部通过此方法可以获取对象    
 6     if(single == null){           // Single Checked  
 7         synchronized (Singleton.class) {   //保证了同一时间只能只能有一个对象访问此同步块        
 8             if(single == null){   // Double Checked  
 9                 single = new Singleton();          
10         }     
11       }  
12     }    
13     return single;   //返回创建好的对象   
14   }  
15 }  

 

转载于:https://www.cnblogs.com/hebao0514/p/4512777.html

相关文章:

  • 感受
  • 黑马程序员--C语言中的枚举
  • 父窗口中得知window.open()出的子窗口关闭事件
  • CYQ.Data 快速开发之UI(赋值、取值、绑定)原理
  • 码医自学法V2.2(附名老中医)
  • MVC 根据模板动态生成静态页面
  • 剑指OFFER之变态跳台阶(九度OJ1389)
  • Markdown 学习笔记
  • 服务计算与服务生态系统 第二章测验题答案
  • 121 Best time to buy and sell stock i
  • 新书《开源安全运维平台OSSIM最佳实践》亮相2016北京图书订货会
  • MyEclipse中拷贝J2EE项目,发布到tomcat中名字一样的解决办法
  • Shell编程—【02】命令替换、算数运算与定义变量
  • WIN7系统下怎样批量添加文件扩展名
  • [Android]Android开发入门之HelloWorld
  • [笔记] php常见简单功能及函数
  • angular2开源库收集
  • ECS应用管理最佳实践
  • hadoop集群管理系统搭建规划说明
  • HTTP请求重发
  • Python_OOP
  • SwizzleMethod 黑魔法
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 学习笔记:对象,原型和继承(1)
  • 正则表达式
  • Spring Batch JSON 支持
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​比特币大跌的 2 个原因
  • ###项目技术发展史
  • #android不同版本废弃api,新api。
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (2)Java 简介
  • (k8s中)docker netty OOM问题记录
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (简单) HDU 2612 Find a way,BFS。
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (十六)串口UART
  • .net CHARTING图表控件下载地址
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET 服务 ServiceController
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET下ASPX编程的几个小问题
  • .sdf和.msp文件读取
  • ??javascript里的变量问题
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @property @synthesize @dynamic 及相关属性作用探究
  • [ SNOI 2013 ] Quare
  • [ solr入门 ] - 利用solrJ进行检索
  • [20170713] 无法访问SQL Server
  • [Android] 修改设备访问权限
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项
  • [Docker]五.Docker中Dockerfile详解
  • [Hadoop in China 2011] 蒋建平:探秘基于Hadoop的华为共有云