概述
Java设计模式-创建型设计模式-单例模式
从这一专栏开始将学习设计模式,上课学习和自己总结归纳的笔记将总结出来供大家参考。
参考书籍:《设计模式就该这样学》
其他文章:
Java设计模式-UML类图 | Java设计模式-七大架构设计原则-开闭原则 |
---|---|
Java设计模式-七大架构设计原则-依赖倒置原则 | Java设计模式-七大架构设计原则-单一职责原则 |
Java设计模式-七大架构设计原则-接口隔离原则 | Java设计模式-七大架构设计原则-最少知道原则(迪米特法则) |
Java设计模式-七大架构设计原则-里氏替换原则和合成复用原则 | Java设计模式-创建型设计模式-简单工厂模式 |
Java设计模式-创建型设计模式-工厂方法模式(工厂模式) | Java设计模式-创建型设计模式-抽象工厂模式 |
Java设计模式-创建型设计模式-建造者模式 | Java设计模式-创建型设计模式-原型模式 |
Java设计模式-创建型设计模式-单例模式 | Java设计模式-结构型设计模式-适配器模式 |
Java设计模式- 结构型设计模式-享元模式 | Java设计模式- 结构型设计模式-外观模式 |
Java设计模式- 结构型设计模式-桥接模式 | Java设计模式-结构型模式设计模式-组合模式 |
Java设计模式-行为型设计模式-观察者模式 |
文章目录
- Java设计模式-创建型设计模式-单例模式
- 一、创建型设计模式
- 二、单例模式
- 1.单例模式定义
- 单例设计模式主要解决的是类的频繁创建与销毁问题,通过控制类实例的创建来节省系统资源。
- 2.单例模式的代码实现
一、创建型设计模式
创建型模式对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离,对客户端代码需要调用对象的时候隐藏了类的实例化的创建细节。
其中包括:简单工厂模式(不在GoF23种设计模式中)、工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式。
二、单例模式
1.单例模式定义
1.单例模式(Singleton Pattern):确保某一个类最多只有一个实例,并向整个系统提供这个实例,即该类需提供一个访问唯一实例的全局方法,这个类称为单例类。单例模式的目的是使得某个类最多只有一个实例。
2.为了确保单例类最多只有一个实例,且能够向外部提供唯一实例,单例类应具备以下特点特征:
(1)构造方法私有化;
(2)能够生成唯一实例;
(3)存在能够向外部提供唯一实例的方法;
(4)实例和方法需用static关键词修饰。
3.单例模式确保了系统中只能存在唯一实例,则在内存里只有一个实例,这样在频繁的创建和销毁实例时可以减少内存的开销。但由于单例类只向外部提供了访问实例的方法、没有接口,无法被重用和扩展。
4.在GoF23种设计模式中属于创建型设计模式:
其中包括:简单工厂模式(不在GoF23种设计模式中)、工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式。
单例设计模式主要解决的是类的频繁创建与销毁问题,通过控制类实例的创建来节省系统资源。
2.单例模式的代码实现
怎么写饿汉式?
public class Singleton1{
private static Singleton1 singleton1 =new Singleton1();
private Singleton1() {
//避免通过反射来创建对象
if(singleton1!=null){
throw new RuntimeException("单例对象不能重复创建");
}
}
public static Singleton1 getInstance() {
return singleton1;
}
}
怎么写懒汉式?
双检锁/双重校验锁(DCL,即 Double-Checked-Locking)
public class Singleton2 {
//加上了volatile后,多线程访问下会给加上volatile变量赋值语句之后加上一个内存屏障
//让JVM禁止内存重排,保证构造方法赋值操作不能在static对象之后 越过这个内存屏障
private static volatile Singleton2 singleton2 = null;
private Singleton2() {
}
public static Singleton2 getInstance() {
//当对象创建出来以后,只需要判断对象是否有值,如果有了就直接返回不需要进入了
if (singleton2 == null) {
synchronized (Singleton2.class) {
//如果没有这个判断,两个线程都会创建对象,并且后进来的线程创建的对象会覆盖掉前面的对象
if (singleton2 == null) {
singleton2 = new Singleton2();
}
}
}
return singleton2;
}
}
jdk中的单例模式有哪些?
Runtime类,比如说我们调用System里面的exit() ,调用的就是Runtime类中的exit()
最后
以上就是如意酸奶为你收集整理的Java设计模式-创建型设计模式-单例模式Java设计模式-创建型设计模式-单例模式的全部内容,希望文章能够帮你解决Java设计模式-创建型设计模式-单例模式Java设计模式-创建型设计模式-单例模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复