目的:写出优雅的代码结构,让代码易于维护,扩展性高。
文章目录
- 1.整体编程思想理解
- 2.设计原则(巨人的肩旁,前人留下的知识积累)
- 3.设计模式
- 4.根据实际需求设计代码结构,多画图
1.整体编程思想理解
OOP,AOP,IOP
面向对象编程,英语 Object Oriented Programing,英语简写OOP。通过人类习惯思维对程序实体进行设计,这个实体有什么属性,能做什么,与另一个实体的关系是什么,怎么进行交流/交互。
面向切面编程,英语 Aspect Oriented Programing,英语简写AOP。这种编程方式是对已有的编程进行补充。比如现有一个完成的程序流程,在不改动原有程序代码和流程的情况下,对流程中某一节点进行代码功能注入,这就是面向切面编程。
面向接口编程,英语 Interface Oriented Programing,英语简写IOP。抽象思维编程,先想象需要做什么,不考虑具体怎么做。设想你需要创建多个项目模块:单个模块内部设计(核心功能设计不可变-开闭原则;功能设计保障与其他功能的解耦-单一职责,单一接口);模块与模块之间依赖于抽象(接口)。
2.设计原则(巨人的肩旁,前人留下的知识积累)
开闭原则,依赖倒置原则,单一职责原则,接口隔离原则,迪米特原则,里式替换原则,合成复用原则。
学习这些原则不要死套,这些原则的目的是解决问题,为我们设计代码结构时提供思维,要根据实际需求进行使用,不然搞不懂为啥要用设计模式。
开闭原则:不变代码的封装闭合,不可改动,变动代码的放开控制。
依赖倒置原则:正常思维,开发会根据实际需求考虑如何实现程序,没有更进一步思考设计程序。所谓依赖倒置就是反向思维,分两步设计程序,一是明确我们需要做什么(抽象编程,接口编程),二考虑具体实现(实现接口)。好处很明显,如果有一天我们换了具体实现也不影响原有程序的运行。
单一职责原则:尽量保障实体类功能单一,避免出现实体类功能过于复杂。实体类功能复杂缺点,当我们只需要修改其中一个功能时,不知道会不会影响实体类其他功能。功能单一就不存这个问题。
接口隔离原则:在对某一模块功能进行设计时,尽量避免在一个接口中定义过于复杂方法理念,造成接口使用混乱。
迪米特原则:减少对象与对象的复杂管理。能基于一个关系实现,就不要引入另一个对象的关系。关系复杂了,一动就出问题。
总结:使用者不关注实现(输入–输出,抽象编程/接口编程,),基于抽象接口编程。实现者考虑具体怎么做(输入–输出,你给我什么,我做好了,结果返回),设计模块功能清晰,实现变和不变代码的分离,功能模块拆分细致复用程度高,功能单一关系不复杂。
3.设计模式
工厂模式: 封装创建过程和管理。对象需要创建复杂或需要管理(比如Spring BeanFactory能对创建,销毁,功能加强代理等实现,比我们直接new一个对象还是要6B些),使用者不会关注,使用者依赖工厂获取对象,工厂隐藏管理和和创建方式。
单例模式: 独立无二。确保一个类在全局只有一个实列。静态属性跟单例有一定的相似性。为什么要使用单列?可以反向思考,我们为什么需要使用多例,因为需要存储不同的对象信息,肯定需要使用不同的对象。单例模式可以理解为流程功能的实现,比如到银行办事:需要拿号 - 等待叫号 - 到柜台办理 这种功能流程是固定的,只需要一个对象维护对应的功能。
原型模式: 基于clone创建对象。
代理模式: JDK动态代理和Cglib代理实现方法的增强,就是AOP。
委派、观察: 创建一个委派、观察类实现。
策略、适配: 选择实现,基于另一种方式适配现有方法。基于接口实现+工厂模式实现对象动态变化使用。
模板模式: 抽象类抽取共性代码,子类只需要实现变更的方法。
装饰者模式: 不用继承,基于对象和接口实现对象功能加强。
4.根据实际需求设计代码结构,多画图
结合Spring IoC、DI、设计模式实现优雅代码。