【Java常见的4种设计模式——单例模式】java的四种设计模式:
一.单例模式
(一)饿汉模式
(二)懒汉模式
1.非线程安全
2.线程安全
(1)普通锁模式
(2)双重锁模式(既安全,又能提高效率)
二.模版模式
三.装饰模式
四.工厂模式
这四种模式是个人理解,如有不对之处,大家可以指出。
一.单例模式(一次只能创建一个对象)
(一)饿汉模式
步骤:
1.初始化一个私有的对象。
2.建立私有化构造方法,不让外部直接创建对象。
3.建立一个公有方法,暴露给外部调用。该公有方法直接返回私有的对象。
4.通过类名直接调用该公有方法。
/**
* 单例设计模式:
*饿汉设计模式
*/
public class singleInstance {
private static singleInstance instance = new singleInstance();
private singleInstance(){};
//该方法用于暴露给外部调用
public static singleInstance getInstance(){
return instance;
}
}
public class singleInstanceDemo {
public static void main(String[] args) {
singleInstance instance = singleInstance.getInstance();
}
}
(二)懒汉模式
步骤:
1.创建私有对象,但不初始化,什么时候用,什么时候再初始化,太懒了,但能节省内存,提高效率。
2.建立私有化构造方法,不让外部直接创建对象。
3.建立一个公有方法,暴露给外部调用。该公有方法直接返回私有的对象。
4.通过类名直接调用该公有方法
种类:
1.非线程安全
/**
* 单例设计模式:
*懒汉设计模式(非线程安全)
*/
public class singleInstance {
//这里不初始化
private static singleInstance instance;
private singleInstance(){};
//该方法用于暴露给外部调用
public static singleInstance getInstance(){
if(instance == null){
singleInstance instance = new singleInstance();
}
return instance;
}
}
public class singleInstanceDemo {
public static void main(String[] args) {
singleInstance instance = singleInstance.getInstance();
}
}
2.线程安全
(1)普通锁模式
/**
* 单例设计模式:
*懒汉设计模式(线程安全 普通锁模式)
*/
public class singleInstance {
//这里不初始化
private static singleInstance instance;
private singleInstance(){};
//该方法用于暴露给外部调用
public static synchronized singleInstance getInstance(){
if(instance == null){
singleInstance instance = new singleInstance();
}
return instance;
}
}
public class singleInstanceDemo {
public static void main(String[] args) {
singleInstance instance = singleInstance.getInstance();
}
}
(2)双重锁模式(既安全,又能提高效率)
/**
* 单例设计模式:
*懒汉设计模式(线程安全 双锁模式)
*/
/**
* 单例设计模式:
*懒汉设计模式(线程安全 双锁模式)
*/
public class singleInstance {
//这里不初始化
private static singleInstance instance;
private singleInstance(){};
//该方法用于暴露给外部调用
public static singleInstance getInstance(){
if(instance == null){//这个if语句看似多余,其实是为了提高效率,提早阻隔不满足条件的进程进入。
synchronized (singleInstance.class){
if(instance == null){//这个if语句的作用是保证单例。如果没有该句,那么Thread1和Thread2都可能进来,创建多个对象。
singleInstance instance = new singleInstance();
}
}
}
return instance;
}
}public class singleInstanceDemo {
public static void main(String[] args) {
singleInstance instance = singleInstance.getInstance();
}
}
推荐阅读
- Java|Java基础——数组
- 人工智能|干货!人体姿态估计与运动预测
- java简介|Java是什么(Java能用来干什么?)
- Java|规范的打印日志
- Linux|109 个实用 shell 脚本
- 程序员|【高级Java架构师系统学习】毕业一年萌新的Java大厂面经,最新整理
- Spring注解驱动第十讲--@Autowired使用
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- jvm|【JVM】JVM08(java内存模型解析[JMM])
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)