看了《Spring5核心原理与30个类手写实战》这本书,记录一下第二章Spring中常用的设计模式。
设计模式
创建型模式
工厂模式
简单工厂模式
简单工厂模式(Simple Factory Pattern)是指由一个工厂对象决定创建哪一种产品类的实例
工厂方法模式
工厂方法模式(Fatory Method Pattern)是指定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪些类,工厂方法模式让类的实例化推迟到子类中进行。在工厂方法模式中用户只需关心所需产品对应的工厂,无须关心创建细节,而加入新的产品时符合开闭原则。
抽象工厂模式
抽象工程模式(Abastract Factory Pattern)是指提供一个创建一系列相关或相互依赖对象的接口,无须指定他们的具体类。客户端(应用层)不依赖于产品类实例如何被创建、如何被实现等细节,强调的是一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量重复的代码。需要提供一个产品类的库,所有产品以同样的接口出现,从而使客户端不依赖于具体实现。
单例模式
单例模式(Singleton Pattern)是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。
饿汉单例模式
饿汉单例模式在类加载的时候就立即初始化,并且创建单例对象。它绝对线程安全,在线程还没出现以前就实例化了,不可能存在访问安全问题。
public class HungrySingleton {
private static final HungrySingleton hungrySingleton = new HungrySingleton();
private HungrySingleton(){};
public static HungrySingleton getInstance(){
return hungrySingleton;
}
}
优点:没有加任何锁、执行效率比较高,用户体验比懒汉式单例模式更好
缺点:类加载的时候就初始化,不管用于不用都占着空间,浪费了内存,有可能“占着茅坑不拉屎”。
懒汉使单例模式
懒汉式单例模式的特点是:被外部类调用的时候内部类才会加载。
public class LazySimpleSingleton {
private LazySimpleSingleton(){}
//静态块,公共内存区域
private static LazySimpleSingleton lazy = null;
public static LazySimpleSingleton getInstance(){
if (lazy == null){
lazy = new LazySimpleSingleton();
}
return lazy;
}
}