- 设计模式的概念
- 设计模式是针对面向对象设计中常见问题的标准化、可复用的解决方案模板,它们是基于经验和原则的抽象指导,旨在提升代码质量和软件开发效率。通过恰当运用这些模式,Java开发者可以构建更为健壮、灵活和易于维护的软件系统。
- 设计模式的分类
- 创建型模式(关注对象的创建过程,旨在将对象的创建和使用分离)
- 单例模式
- 工厂方法模式
- 抽象工厂模式
- 建造者模式
- 原型模式
- 结构型模式(关注如何组合对象以形成更大的结构,简化系统结构)
- 适配器模式
- 装饰器模式
- 代理模式
- 桥接模式
- 组合模式
- 享元模式
- 外观模式
- 行为型模式(关注对象之间的责任分配,算法封装以及对象间的通信。)
- 策略模式
- 命令模式
- 观察者模式
- 迭代器模式
- 模板方法模式
- 访问者模式
- 中介者模式
- 职责链模式
- 状态模式
- 备忘录模式
- 解释器模式
- 创建型模式(关注对象的创建过程,旨在将对象的创建和使用分离)
- 设计原则
- 单一职责
- 一个类,应当只有一个引起它变化的原因(There should never be more than one reason for a class to change.原文),即一个类应该只有一个职责。一个类的职责越多,在调用这个类的时候,就越难以拆分,进而导致程序难以扩展。当然并不是强制要求每一个类都只能有一个方法,而是要求每个类的所有方法都尽可能为某一种职责服务,比如一个MP3类,可以有开机、关机、播放音乐等方法,从职责的角度类的功能是单一的,此时如果需要上传下载音乐的功能,就超出了MP3的职责范围,就应该定义一个类专门提供上传下载功能。
- 里氏替换
- 子类必须能够替换其基类出现在任何合理的情况下,而不影响程序的正确性。简单举个例子,如果一个Dog类的对象在程序中调用一个方法,那么我们把这个对象替换成Dog类的任意一个子类的对象,程序都不应该出现任何异常或错误。
- 依赖倒置
- 高层模块不应该依赖低层模块(可以理解为父类和子类)
- 两者都应该依赖于抽象(接口或抽象类)
- 抽象不应该依赖细节(接口或抽象类中要避免引入实现类的特定方法或属性)
- 细节应该依赖抽象(不论实现类怎么实现逻辑,都应该可以通过抽象类或接口与其他模块进行交互)
- 接口隔离
- 一个接口(Interface)代表一个角色,不应该将不同的角色交给同一个接口。比如一个接口具备买菜的方法和开车的方法,那么实现类在实现接口的时候,就不可避免地要实现一个不需要的方法。这个时候两个分别具有买菜和开车方法的接口,就比上述的一个接口的设计要好。
- 迪米特法则
- 一个对象要对其它对象有最少的了解,只与直接的“朋友”通信,不与陌生对象打交道。这里的朋友包括对象本身、对象的属性对象、对象的方法参数、对象方法的返回值、对象方法内部创建的对象。除直接朋友之外,对于对象来说都是陌生的。这样做的好处是可以防止一个类有过多的职责,或者与过多的类耦合。
- 开闭原则
- 一个软件实体应当对扩展开放,对修改关闭。
- 面向对象编程中,开闭原则是最基础的原则,起到总的指导作用,其他原则都是开闭原则的具体形态,即其他原则都是开闭原则的手段和工具。
- 单一职责
大家如果需要视频版本的讲解,可以关注下我的B站:
一、设计模式之概念、分类和原则