目录
学习知识,对知识源头的了解很重要!
1.什么是设计模式?
2.OOP七大原则(重要,为后续写代码提供参考,规范)
3.单例设计模式
3.1 饿汉式
3.2 懒汉式
3.3 线程安全的懒汉式
3.4 双检查锁机制
4.常见应用场景:
设计模式,是前辈们对代码开发的经验总结,是解决特定问题的一系列套路,它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案! (这里也可以理解为武功招式)
1995年,GoF(Gang of Four,四人组) 合作出版了<<设计模式:可复用面向对象软件的基础>>一书,
共收录了23种设计模式,从此树立了软件设计模式领域的里程碑;
1.开闭原则:
对扩展开发,对修改关闭;
2.里氏替换原则:
继承必须确保超类所拥有的性质在子类中仍然成立;
3.依赖倒置原则:
耦合于抽象,不偶合于具体;
4.单一职责原则:
控制类的粒度大小、将对象解耦、提高其内聚性;
5.接口隔离原则:
要为各个类建立它们需要的专用接口;
6.迪米特法则:
只与你的直接朋友交谈,不跟"陌生人"说话;
7.合成复用原则:
尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现;
了解了这些,咱们赶紧热热身吧!
简介:单例模式的核心思想是,在程序运行以后,此类的对象在内存中只允许存在一份;
单例模式分为:懒汉式(可以使它变成线程安全的)、饿汉式(自身是线程安全的)
下面具体说明,实现步骤:
public class Singleton {
//1.创建静态变量,并赋值,上来直接new; 这时在类加载时就会将此对象加载进内存;
private static Singleton singleton = new Singleton();
//2.私有构造器,不让外界再去new
private Singleton(){}
//3.对外界提供一个静态方法获取Singleton对象
public static Singleton getSingleton(){
//4.此时返回的都是同一个Singleton对象;
return singleton;
}
}
public class Singleton {
//1.创建静态变量,并赋值,上来先赋值为null;
private static Singleton singleton = null;
//2.私有构造器,不让外界再去new
private Singleton(){}
//3.对外界提供一个静态方法获取Singleton对象
public static Singleton getSingleton(){
//3.1 判断此静态变量有没有赋值;
if(singleton==null){
//3.2 没有赋值,再去new ; 这是懒汉式的核心
singleton = new Singleton();
}
//3.3 返回给调用者;
return singleton ;
}
}
public class Singleton {
//1.创建静态变量,并赋值,上来先赋值为null;
private static Singleton singleton = null;
//2.私有构造器,不让外界再去new
private Singleton(){}
//3.对外界提供一个静态方法获取Singleton对象
public static Singleton getSingleton() {
//3.1先用同步代码块,上把锁,监视器(锁)就是当前类对象; 这是线程安全的懒汉式核心
synchronized (Singleton.class) {
//3.1 判断此静态变量有没有赋值;
if (singleton == null) {
//3.2 没有赋值,再去new ; 这是懒汉式的核心
singleton = new Singleton();
}
//3.3 返回给调用者;
return singleton;
}
}
}
public class Singleton {
//1.创建静态变量,并赋值,上来先赋值为null;
private static Singleton singleton = null;
//2.私有构造器,不让外界再去new
private Singleton(){}
//3.对外界提供一个静态方法获取Singleton对象
public static Singleton getSingleton() {
//3.1先判断singleton有没有赋值,如果有值,直接返回此对象,第一次校验;
//优点:避免了线程阻塞,效率提升;
if(singleton==null){
//3.2 如果没有赋值,先用同步代码块,上把锁,监视器(锁)就是当前类对象; 这是线程安全的懒汉式核心
synchronized (Singleton.class) {
//3.3 判断此静态变量有没有赋值,第二次校验;
if (singleton == null) {
//3.4 没有赋值,再去new ; 这是懒汉式的核心
singleton = new Singleton();
}
//3.3 返回给调用者;
return singleton;
}
}
return singleton;
}
}
1.Windows的任务管理器;
2.Windows的回收站;
3.数据库连接池的设计,一般也是单例模式;
4.在Servlet编程中,每个Servlet也是单例的;
5.在Spring中,每个Bean默认就是单例的;