这是我参与「第五届青训营 」伴学笔记创作活动的第13天
单例模式
确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
- 构造方法只能是private
- 拥有一个当前类的静态成员变量(static)
- 提供一个静态方法,向外界提供当前类的实例(实例只能在类内部实例化)
- 应用:序列号生成器、页面计数器、访问数据库/IO等消耗大量资源操作的时候等等
- 分为饿汉式、懒汉式
- 单例模式的最佳实践是无状态的,一般以工具类的形式提供(若有状态,如一个字段等于10,那所有调用这个实例的变量都可以修改这个字段)
简单工厂模式
又称为静态工厂方法模式,属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
- 工厂类:专门负责创建其他类的实例的类(相当于一个大类)
- 实现了对象的创建(工厂类负责)和对象的使用的分离,但不够灵活(新增产品就要修改工厂类,不满足开闭原则)
工厂模式
定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。
- 接口是工厂的抽象接口,子类就是具体的工厂类,它去实例化具体的产品
- 满足开闭原则
抽象工厂模式,有多个产品体系的工厂模式,但违反了开闭原则
装饰器模式
动态地给一个对象添加一些额外的功能。就增加功能来说,装饰模式比生成子类更为灵活。
- 是把一个类的对象嵌入另一个类(装饰器)的对象中,而不是继承现有类在子类进行扩展
适配器模式
将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
- 就像市电是220V交流电,而手机要用直流电,所以需要一个插头(适配器)进行转换
观察者模式
定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新
- 即有事我会说,别没事就来问我
策略模式(政策模式)
定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)
- 客户不需要关心算法的逻辑
模板方法模式
定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
- 比如炒菜有一套固定步骤,而具体实现看个人(子类)
建造者模式(生成器模式)
避免将所有的构造步骤放到构造函数里,使得我们可以分步骤去创建复杂对象,不需要一下子把所有参数全部传进去再构造
其他
开闭原则:程序对于扩展是开放的,对于修改是封闭的
- 如某工厂有个车辆生产线,而现在需要生产口罩,新增口罩生产线要比把车辆生产线改造为口罩生产线要好