设计模式笔记——单例模式
来源:互联网 发布:敲诈淘宝卖家减肥药 编辑:程序博客网 时间:2024/06/11 18:32
前几天校园招聘会,投简历时就直接给我来了一份笔试题。我一看,卧槽,全都是考很基本很基本的题,可以说基本到恶心,然而对于我这个实习了半年,可以独自把一个项目完成的程序猿来说,很可惜这些基本题却把我放倒了,真是讽刺啊。就感觉一个全栈工程师被问如何输出一个helloworld被吓得跪地直喊OMG一样,哈哈,开个玩笑。没办法,面向学生招聘,企业都爱玩这一套,对于我这个有实战经验的人来说,尽管这些基本的东西感觉在实际项目还真不怎么用得上,但还是得去沉淀一下啊。
笔试题的组成基本少不了数据结构和设计模式,既然你把我放倒了,那么我就从设计模式开始补回来吧,坚持一天一种模式学习吧。
首先是设计模式里最简单的一种模式,单例模式。顾名思义,就是一个类,在使用的时候确保只有一个实例被初始化。
第一步,创建一个单例类:
SingleTon.java
public class SingleTon {private static SingleTon instance;private int count;//构造方法为私有,无法直接new()获得实例private SingleTon(){count=0;}public static SingleTon getInstance(){if(instance==null){instance=new SingleTon();}return instance;}public void print(){System.out.println(count);}public void add(){System.out.println("变量加1");count++;}}
第二步,创建一个运行测试类:
PatternTest.java
public class PatternTest {public static void main(String[] args) {// TODO Auto-generated method stubSingleTon singleTon1=SingleTon.getInstance();singleTon1.print();singleTon1.add();SingleTon singleTon2=SingleTon.getInstance();singleTon2.print();}}
运行结果:
果然很简单吧,两次获取实例都是同一个实例,所以加一操作add()也只是在同一个对象上的成员变量加一。
不过,对于单例模式,若是比较起其性能,如内存,线程安全等,则有几种不同的实现方式。
1. 节省内存(懒汉模式),非线程安全式:
public class SingleTon {private static SingleTon instance;//构造方法为私有,无法直接new()获得实例private SingleTon(){}public static SingleTon getInstance(){if(instance==null){instance=new SingleTon();}return instance;}}实际上就和上面一开始的代码一样,只有使用时才实例化,但没有考虑到线程安全。
2. 节省内存, 线程安全,效率慢式:
public class SingleTon {private static SingleTon instance;//构造方法为私有,无法直接new()获得实例private SingleTon(){}public static synchronized SingleTon getInstance(){if(instance==null){instance=new SingleTon();}return instance;}}就是在getInstance()方法里加个同步锁而已,虽然可以达到线程安全,但效率慢。
3. 耗内存,线程安全,效率快式:
public class SingleTon {private static SingleTon instance=new SingleTon();//构造方法为私有,无法直接new()获得实例private SingleTon(){}public static SingleTon getInstance(){return instance;}}就直接在加载类的时候就初始化了,这样会耗内存,但不使用synchronize锁,这样就可以不用加同步锁也可以达到线程安全的效果。
实际上还有其他的方式,但一般都是使用第三种方式创建单例多。
0 0
- 设计模式笔记之——单例设计模式
- 设计模式笔记(十七) —— 单例模式
- 设计模式——单例模式(学习笔记)
- 设计模式学习笔记——单例模式
- 设计模式学习笔记——单例模式
- 设计模式学习笔记——单例模式
- 设计模式笔记——单例模式
- 设计模式学习笔记——单例模式
- 设计模式:学习笔记(1)——单例模式
- 设计模式:学习笔记(1)——单例模式
- 设计模式:学习笔记(1)——单例模式
- 设计模式学习笔记——单例(Singleton)模式
- 设计模式学习笔记——单例模式
- <HeadFirst设计模式>笔记——单例模式
- 十七、单例模式——设计模式学习笔记
- 设计模式学习笔记—单例模式
- 设计模式学习笔记—单例模式(Singleton)
- 设计模式—单例设计模式
- spring事务问题
- CSKY CVM jni环境搭建
- linux下使用select实现精确定时器
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- 图解oracle jdeveloper中创建BPM审批页面
- 设计模式笔记——单例模式
- 设计模式笔记:单例模式
- Java并发编程:并发容器之CopyOnWriteArrayList(转载)
- 多线程同步互斥实例——使用synchronized实现线程通信和互斥
- OD破解Crackme1.exe密码
- android /Cordova LOG 、console 调试调试打印log
- struts1单例线程不安全struts2多例线程安全
- 永久关闭linux防火墙
- C/C++预习:数字逆序输出(2,折半)