【每周一文】作为一名当代码农,看到自己代码中的ifelse随处可见,给人的第一感觉是不整洁,逻辑不清晰,没有很好的遵循程序设计的原则;想着手去修复这些问题时,发现力不从心,这才意识到设计模式的重要性,所以开始接下来的“不归路”吧。
开篇
谁发明了设计模式?
设计模式的概念最早是由克⾥斯托佛·亚历⼭⼤
在其著作 《建筑模式语⾔》
中⾸次提出的。 本书介绍了城市设计的 “语⾔”,提供了253个描述城镇、邻⾥、住宅、花园、房间及⻄部构造的模式, ⽽此类 “语⾔” 的基本单元就是模式。后来,埃⾥希·伽玛
、 约翰·弗利赛德斯
、 拉尔夫·约翰逊
和 理查德·赫尔姆
这四位作者接受了模式的概念。 1994 年, 他们出版了 《设计模式: 可复⽤⾯向对象软件的基础》
⼀书, 将设计模式的概念应⽤到程序开发领域中。
——小傅哥《重学 Java 设计模式》
一、设计的六大原则
- 单一职能原则(Single Responsibility Principle,SRP)
定义:
一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因;
理解:
⼀个类和⽅法只做⼀件事; - 开闭原则(Open-Closed Principle,OCP)
定义:
一个软件实体应当对扩展开放,对修改关闭。即软件实体(一个软件模块、一个由多个类组成的局部结构或一个独立的类)应尽量不修改原有代码的情况下进行扩展;
理解:
抽象架构,扩展实现; - 里氏代换原则(Liskov Substitution Principle,LSP)
定义:
所有引用基类(父类)的地方必须能透明地使用其子类的对象;
理解:
多态,⼦类可扩展⽗类; - 依赖倒转原则(Dependency Inversion Principle,DIP)
定义:
抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程;
理解:
细节依赖抽象,下层依赖上层; - 接口隔离原则(Interface Segregation Principle,ISP)
定义:
使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些不需要的接口;
理解:
建⽴单⼀接⼝; - 迪米特法则(Law of Demeter)/ 最少知道原则(LeastKnowledge Principle,LKP)
定义:
一个软体实体应当尽可能少地与其他实体发生相互作用。
理解:
最少知道,降低耦合。
二、设计模式的分类
创建型模式:
这类模式提供创建对象的机制, 能够提升已有代码的灵活性和可复⽤性。
- 单例
- 工厂方法
- 抽象工厂
- 原型
- 建造者
结构性模式:
这类模式介绍如何将对象和类组装成较⼤的结构, 并同时保持结构的灵活和⾼效。 - 适配器
- 桥接
- 组合
- 装饰
- 外观
- 享元
- 代理
行为模式:
这类模式负责对象间的⾼效沟通和职责委派。 - 责任链
- 命令
- 迭代器
- 中介者
- 备忘录
- 观察者
- 状态
- 策略
- 模板方法
- 访问者
该文章仅学习记录使用,参考资源:
设计模式六大原则
《重学 Java 设计模式》——小傅哥