概述
简单说下什么是设计模式:就是代码编写得套路,官方一点儿讲就是前辈们在代码编写时总结出来的一些编程技巧,形成了一套设计原则和标准。满满的都是经验
参考:
微信公众号-重温23种设计模式:号主是个大美女哦,分享的文章基本的都是干货,不是互相宣传,只是个人感觉很好。
极客时间-王争的设计模式之美:这个专栏很详细,真的很详细,需要花时间仔细看。
一、6大设计原则
- 单一职责原则
- 里斯替换原则
- 依赖倒置原则
- 接口隔离原则
- 迪米特原则
- 开闭原则
6大设计原则详情可以参考上面的微信公众号
二、23种设计模式
4种创建型模式
主要用于创建对象
1. 单例模式 Singleton Pattern
单例模式确保一个类只有一个实例,并把这个实例在整个系统中共用,单例可以减少内存开销。
单例模式分成两种:
- 饿汉模式:在类定义时就初始化
- 懒汉模式:在使用时才进行初始化
实现单例模式的四种方式:
1.饿汉模式:
/**
* @description 单例模式-饿汉模式 hungry man pattern
*在类定义的时候就初始化
* 缺点:不支持延迟加载
*/
public class Singleton {
public static final Singleton INSTANCE = new Singleton();
private Singleton(){}
public void doSomething(){
System.out.println("doSomething...");
}
}
2.懒汉模式-双重效验
/**
* @description 单例模式-懒汉模式(双重效验) lazy man pattern
* 普通的懒汉模式我就不写了,存在并发性能问题,基本就是串行化的了
* <p>
* 在调用的时候初始化
*/
public class Singleton2 {
private static Singleton2 singleton2;
private Singleton2() {
}
public static Singleton2 getInstance() {
if (singleton2 == null) {
synchronized (Singleton2.class) {
if (singleton2 == null) {
singleton2 = new Singleton2();
}
}
}
return singleton2;
}
public void doSomething() {
System.out.println("doSomething...");
}
}
3.静态内部类实现方式
/**
* @description 单例模式-静态内部类
* 这种方式有点儿类似饿汉模式,但是它又能做到延迟加载(静态内部类的特性)
*/
public class Singleton3 {
private Singleton3() {}
private static class SingletonHolder{
private static final Singleton3 INSTANCE = new Singleton3();
}
public static Singleton3 getInstance() {
return SingletonHolder.INSTANCE;
}
public void doSomething() {
System.out.println("doSomething...");
}
}
4.枚举类单例
/**
* @description 单例模式-枚举类
* 利用枚举类的特性保证创建对象的唯一性和线程安全性
*/
public enum Singleton4 {
INSTANCE;
private Singleton4(){}
public void doSomething(){
System.out.println("doing something...");
}
}