Java单例模式
来源:互联网 发布:audition mac 破解版 编辑:程序博客网 时间:2024/05/17 22:38
单例模式简单说即一个类只有一个对象实例。
从具体实现角度来说,就是以下三点:
1. 单例模式的类只提供私有的构造函数
2. 类定义中含有一个该类的静态私有对象
3. 该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象,并返回该对象。
代码:
package 单例模式;/*好处:保证对象的唯一性 * 步骤: * 1,私有化该类构造方法 * 2,通过new在本类创建一个本类对象 * 3,定义一个公有的方法,创建将对象返回 *///单例模式的饿汉模式,类一加载,对象就存在class Single{ static Single single=new Single(); private Single() { } public static Single getInstance(String name) { /*逻辑判断*/ return single; //返回对象 }}//单例模式的懒汉模式,类加载是没有对象,调用geyInstance才有对象class Single{ static Single single=null; private Single() { } public static Single getInstance(String name) { /*逻辑判断*/ if(single==null){ single=new Single(); return single; } }}/*-----------------------------------------------------*///使用单例与不使用单例的区别public class SingleModel { public static void main(String[] args) { //不使用Single ss=Single s;和set、get一样的道理,可控 Single ss=Single.getInstance("条件"); //来看看唯一性,使用单例模式 useSingle us1=useSingle.getInstance(); useSingle us2=useSingle.getInstance(); us1.setNum(10); us2.setNum(20); System.out.println(us1==us2); System.out.println("使用单例模式,us1:"+us1.getNum()); System.out.println("使用单例模式,us2:"+us2.getNum()); //不使用单例模式 notUseSingle nus1=new notUseSingle(); notUseSingle nus2=new notUseSingle(); nus1.setNum(10); nus2.setNum(20); System.out.println(nus1==nus2); System.out.println("不使用单例模式,nus1:"+nus1.getNum()); System.out.println("不使用单例模式,nus2:"+nus2.getNum()); }}class useSingle{ private int num; private static useSingle us=new useSingle(); private useSingle() { } public static useSingle getInstance(){ return us; } public void setNum(int num){ this.num=num; } public int getNum(){ return num; }}class notUseSingle{ public int num; public void setNum(int num){ this.num=num; } public int getNum(){ return num; }}
输出结果:
true
使用单例模式,us1:20
使用单例模式,us2:20
false
不使用单例模式,nus1:10
不使用单例模式,nus2:20
阅读全文
0 0
- java单例模式
- Java单例模式
- java单例模式
- java单例模式
- Java单例模式
- Java单例模式
- java单例模式
- Java单例模式
- java 单例模式
- java单例模式
- java单例模式
- java单例模式
- java 单例模式
- JAVA单例模式
- java单例模式 .
- Java 单例模式
- Java单例模式
- Java 单例模式
- Alibaba编码规约遵从(二)持续集成
- 音视频开发的一系列科普教程
- 达梦数据库存储过程调用
- Spring的AOP实现
- (安卓)自定义控件,自定义(view)中的自定义属性
- Java单例模式
- 使用git把本地文件放到github上去
- 所想
- HTML-1-基础练习
- 作业排程算法—动态规划实现
- [LeetCode] 650. 2 Keys Keyboard
- 八数码第四境界——暴力反向BFS+康托展开判重+打表+回溯记录路径
- 简书大V公然侮辱程序员群体低智商,低素质,恋尸癖!
- js和jquery中获取各种高度和宽度汇总