软件开发中经常遇到业务场景或者技术场景维护的问题,设计模式也是根据前人的开发经验累积下来的一种开发实现方式,它能够很好的解决我们开发中的维护工作、程序的可扩展性、稳定性,这些对我们很有帮助,在如今OOP、AOP、Ioc等开发模式中有很大一部份是来自设计原则扩展出来的。
一、基础设计模式-开闭原则
开闭原则中主要的思想是对修改关闭,对扩展开放。在开发中,很容易出来此类问题,比如在对数据库进行业务编码时,如果此时有一个接口要根据id获取一个对象信息(单表查询),而业务要求很容易发生变化,现需要根据id获取对象以及对象相关的所有信息(多表查询),这时候我们就需要进行扩展另一个类出来继承接口,重新实现,而不是在原有的类上面做修改代码的工作。
二、基础扩展-里氏替换原则
里氏替换原则是基于开闭原则的补充,主要思想是指对开闭原则基类的具体步骤进行规范,大白话就是指开闭原则是由抽象类和具体类来完成的,当有业务修改时,创建一个具体类来继承另一个具体类,里氏替换则对这种编码提出补充,当编码发生变动时,创建出来的具体类应该继承抽象类,抽象类应该是某个具体类的一个扩展,所以创建出来的具体类具有替换它们的父类能力。
三、依赖倒置原则
依赖倒置原则是面向接口的方式进行编程,主要思想是指所有编码环结应该依赖接口,而不是依赖具体,比如视图层应该依赖业务层的接口,业务层依赖服务层的接口,服务层依赖数据层接口,每一层都不需要关心依赖的接口是如何实现的,只需要关心对接口的编码和调用。
四、接口隔离原则
接口隔离原则是指面向接口开发时,肯定存会对具体实现接口的类存在扩展需求,如果具体实现只有一个继承接口,当存在扩展要求时,维护性就比较低了,所以多个接口比一个接口的维护性好,比如,需要一个飞行的接口,如果具体实现是鸟类,看似没有什么问题,但如果具体实现是飞行器,那具体实现不仅仅只有飞行接口,还具备载物接口,载物接口又分为载人和载物,所以一个具体实现类最好有多个可扩展的接口比较好。
五、最少知识原则
最少知识原则是指两个类的工作保持独立,尽量不要相互通信,比如对数据库操作时,用户表应该由用户Class来进行维护,角色表应该由角色Class来维护,当要知道某用户是否有什么权限时,不应该把用户Class放到角色Class中来调用,更不应该将角色Class放到用户Class中来调用,应该在两者之间的做一个中间层,通过中间层来处理用户Class返回来的信息去操作角色Class,这样子就可以实现独立开发,提高维护。
六、合成复用原则
合成复用原则是指守先考虑组合方式,在考虑继承方式,继承又考虑到里氏替换原则,我们在区分什么时候用组合方式,什么时候用继承方式,主要判断是IS-A和Has-A的概念来判断,如果一个机器抽象类和一个飞机具体类,因为飞机是机器的一种,所以符合IS-A,这时候应该使用继承,如果是飞行抽象类和一个飞机具体类,这时候飞行不可能只有飞机一种,因为能够飞行的机器有很多,比如无人机、水上行飞器、滑翔伞等,所以飞行只是飞机的一种能力,符合Has-A,这时候应该使用组合方式。