Java设计模式-[00]设计模式概述

设计模式的7大设计原则

设计模式的7大设计原则

  • 单一职责原则:设计功能目的单一的类
  • 开放-封闭原则:对扩展开放,对修改关闭
  • 李氏(Liskov)替换原则:子类可以替换父类
  • 依赖倒置原则:依赖抽象,不依赖于具体实现;针对接口编程,不要针对实现编程。
  • 接口隔离原则:使用多个专门的接口比使用单一的总接口要好
  • 组合重用原则:要尽量使用组合,而不是继承关系达到重用目的
  • 迪米特(Demeter)原则(最少知道原则):一个对象应当对其他对象有尽可能少的了解

设计模式的分类

设计模式类型 设计模式名称 简要说明 关键字
创建型模式 单例模式(Singleton) 确保一个类只有一个实例,并且提供了对该类的全局访问入口 单实例
原型模式(Prototype) 允许对象在不了解要创建对象的确切类以及如何创建等细节的情况下创建自定义对象。通过拷贝原型对象来创建新的对象 克隆对象
构造器模式(Builder) 将一个复杂类的标识与其构造相分离,使得相同的构建过程能得出不同的对象实例 复杂对象构造
工厂方法模式(Factory Method) 定义了创建对象的接口,它允许子类决定实例化哪个类 动态生产对象
抽象工厂模式(Abstract Factory) 提供一个接口,可以创建一系列相关或互相依赖的对象,而无需要指定他们具体的类 生产成系列对象
结构型模式 适配器模式(Adapter) 将一个类的接口转换成用户希望得到的另一种接口,他使原本不相容的接口得以协同工作 转换接口
桥接模式(Bridge) 将一个复杂的组件分成两个独立的但又相关的继承层次结构,将类的抽象部分和它的实现部分分离开来,使他们可以独立的变化 继承树拆分
组合模式(Composite) 创建树形层次结构来改变复杂性,同时允许结构中的每一个元素操作同一个接口。用于表示“整体-部分”的层次结构 树形目录结构
装饰模式(Decorator) 在不修改对象外观和功能的情况下添加或者删除对象功能。即动态的给一个对象添加一些额外的职责 动态附加职责
外观模式(Facade) 子系统中一组接口提供了一个统一的接口 对外统一接口
享元模式(Flyweight) 可以通过共享对象减少系统中低等级的、详细的对象数目。提供支持大量细粒度对象共享的有效方法 汉字编码
代理模式(Proxy) 为控制对初始对象的访问提供了一个代理或占位符对象 快捷方式
行为型模式 责任链模式(Chain of Reponsibility) 在系统中建立一个链,这样消息可以在首先接收到它的级别被处理,或者可以定位到可以处理它的对象 传递职责
命令模式(Command) 在对象中封装了请求,这样就可以保存命令,将该命令传递给方法以及像任何其他对象一样返回该命令 日志记录,可撤销
解释器模式(Interperter) 可以解释定义其语法表示的语言,还提供了用表示来解释语言中的语句的解释器 虚拟机的机制
迭代器模式(Iterator) 为集合中的有序访问提供了一致的方法,而该集合是独立与基础集合,并与之相分离的 数据集
中介者模式(Mediator) 通过引入一个能够管理对象间消息分布的对象,简化了系统中对象间的通信 不直接引用
备忘录模式(Memento) 保持对象状态的“快照”(snapshot),这样对象可以在不向外界公开其内容的情况下返回到它最初的状态 游戏存档
观察者模式(Observer) 为组件向相关接收方广播消息提供了灵活的方法。定义对象间的一种一对多的依赖关系 订阅、广播、联动
状态模式(State) 允许一个对象在其内部状态改变时改变他的行为 状态变成类
策略模式(Strategy) 定义一系列算法,把他们一个个封装起来,并且使他们之间可互相替换,从而让算法可以独立于使用它的用户而变化 多方案切换
模板方法模式(Template Method) 提供了在不重写方法的前提下允许子类重载部分方法的方法 框架
访问者模式(Visitor) 提供了一种方便的、可维护的方法来表示在对象结构元素上要进行的操作 数据与操作分离

UML类图

设计模式一般都是通过UML类图来描述关系。

UML关联图形解释

图形 解释
image-20220613221027294 依赖
image-20220613221049550 关联
image-20220613221059376 泛化
image-20220613221108104 实现
image-20220613221117119 聚合
image-20220613221126829 组合