本质
- 是面向对象设计原则的实际运用
优点
- 可以提高程序员的思维能力,编程能力和设计能力
- 使程序设计更加标准化,代码编制更加工程化,软件开发效率大大提高,缩短了项目的开发周期
- 使设计的代码可复用性高,可读性强,可靠性高,灵活性好,可维护性强
GoF23
- 创建型模式:单例模式,工厂模式,抽象工厂模式,建造者模式,原型模式
- 结构型模式:适配器模式,桥接模式,装饰模式,组合模式,外观模式,享元模式,代理模式
- 行为型模式:模板方法模式,命令模式,迭代器模式,观察者模式,中介者模式,备忘录模式,解释器模式,状态模式,策略模式,职责链模式,访问者模式
OOP七大原则
- 开闭原则:对扩展开放,对修改关闭(新增功能块不影响其他功能块的工作,能独立的工作)
- 里氏替换原则:继承必须确保父类所拥有的性质在子类中仍然成立(子类尽量不要重写父类的方法,要在原有的基础上扩展)
- 依赖倒置原则:要面向接口编程,不要面向实现编程
- 单一职责原则:控制类的粒度大小,将对象解耦,提高其内聚性(一个方法尽量做一件事情 )
- 接口隔离原则:要为各个类建立它们需要的专用接口
- 迪米特法则:只和你的直接朋友交谈,不跟 “ 陌生人” 讲话
- 合成复用原则:尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现
单例模式
饿汉式单例
- 可能会浪费空间
懒汉式单例
- 解决了饿汉式的弊端,在需要用的时候,再加载需要的对象
工厂模式
核心本质:实例化对象不使用new,用工厂方法替代
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
简单工厂模式(静态工厂模式)
对于增加的新的产品,需要覆盖已有代码
!虽然某种程度上不符合设计原则,但实际使用最多
工厂方法模式
在不修改已有类的前提下,通过增加新的工厂类实现扩展
抽象工厂模式
围绕一个超级工厂创建其他工厂,该超级工厂又称为其他工厂的工厂
建造者模式
优点
- 产品的建造和表示分离,实现了解耦,使用建造者模式可以使客户端不必知道产品内部组成的细节
- 将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰
- 具体的建造者类之间是相互独立的,这有利于系统的扩展,增加新的具体建造者无需修改原有的代码,符合开闭原则
缺点
- 建造者模式创建的产品一般具有较多的共同点,如果产品差异性很大,就不适合使用建造者模式
- 如果产品的内部变化复杂,则需要定义很多具体建造者来实现这种变化,系统会变得很庞大
原型模式
实质是将创建的对象进行克隆,提高程序效率
适配器模式
例子 — 电脑 - 转接器 - 网线
桥接模式
最佳实践 – 一个类存在两个独立变化的维度,且这两个维度都需要进行扩展
静态代理
例子 — 租房的人,中介,房东
动态代理
- 动态代理的代理类是动态生成的,不是我们直接写好的!
- 动态代理分为两大类:基于接口的动态代理,基于类的动态代理