工厂方法模式
工厂方法模式(factory Method pattern)是指定义一个创建对象的接口,但让实现这个接口的类来决定实例化那个类,工厂方法让类的实例化推迟到子类中进行。在工厂方法模式中用户只需要关心所需产品对应的工厂,无需关心创建细节,而且加入新的产品符合开闭原则。
工厂方式适合:
1. 创建对象需要大量重复的代码
2. 客户端不依赖于产品类实例如何被创建、实现等细节
3. 一个类通过其子类来指定创建哪个对象
工厂方法缺点:
1. 类的个数容易过多,增加复杂度
2. 增加了系统的抽象性和理解难度
抽象工厂模式
抽象工厂模式(Abastract Factory pattern)是指提供一个创建一系列相关或相互依赖对象的接口,无需指定他们具体的类。客户端不依赖于产品实例如何被创建、实现等细节,强调的是一系列相关的产品对象一起使用创建对象需要大量重复的代码。需要提供一个产品类的库,所有的产品以同样的接口出项,从而使客户端不依赖于具体实现。
单例模式
单例模式定义及应用场景
单例模式(Singleton pattern)是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。单例模式是创建型模式。
饿汉式单例
在类加载的时候立即初始化,创建单例对象。线程安全,占用内存。
懒汉式单例
在单例对象使用时才会初始化,需要加synchronized否则线程不安全。
用synchronized加锁时,在线程数量较多时,会导致线程阻塞。需要使用双重检查锁的单例模式。
在不使用synchronized锁的情况下,可以使用静态内部类的方式。
预防反射破坏单例,需要在构造方法内判断实例是否已经初始化,如初始化强制停止。
预防序列号破坏单例,需要增加readResolve()方法即可。
注册式单例模式
注册式单例模式又称为登记式单例模式,即使将每一个实例都登记到一个地方,使用唯一标识获取实例。
枚举式单例
枚举式单例模式在静态代码块中就给INSTANCE进行了赋值,是饿汉式单例模式的实现。
容器式单例
适合需要大量创建单例对象的场景,便于管理。非线程安全。