定义
设计模式是前辈们对代码开发经验的总结,是解决特定问题的一系列套路,他不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。
根据目的可以分为三类,创建型模式主要用于创建对象、结构型模式主要用于处理类或对象的组合、行为型模式主要用于描述对类和对象怎么交互和怎么分配职责
序号 | 模式 & 描述 | 包括 |
---|---|---|
1 | 创建型模式 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 |
|
2 | 结构型模式 这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。 |
|
3 | 行为型模式 这些设计模式特别关注对象之间的通信。 |
|
根据范围,即模式主要用于处理类之间的关系还是处理对象之间的关系,可分为:
类模式:处理类与子类之间的关系,这些关系通过继承建立,在编译时就被确定下来,属于静态的;
对象模式:处理对象之间的关系,这些关系在运行时候变化,更具动态性;
统一建模语言——UML
定义了用例图、类图、对象图、状态图、活动图、顺序图、合作图、组件图、部署图
类之间关系的耦合强弱关系
泛化=实现>组合>聚合>关联>依赖
设计原则
donot repeat yourself(DRY)
不要重复,DRY是一个最简单的法则,也是最容易理解的。当我们发现在两个或多个地方发现一些相似的代码的时候,我们需要把他们的共性抽象出来形成一个唯一的新方法
keep it simple,stupid(KISS)
保持简单,KISS原则在设计上可能最被推崇的。
program to an interface,not an implementation
这是设计模式中最基本的哲学,注重和依赖接口,而不是实现。接口是抽象和稳定的,实现则是多种多样的。
YAGNI
只考虑和设计必要的功能,避免过度设计。
共同封装原则
将容易变的类放在同一个包里,将变化隔离出来。
高内聚低耦合
常用的降低耦合度的方法:
1.少使用类的继承,多用接口来隐藏实现
2.模型的功能尽量单一
3.少使用全局变量
4.类和方法尽量使用私有
5.尽量不使用硬编码,也不要用sql语句操作数据库
6.避免直接操作或调用其他模块和类,如果必须存在耦合,则原则上尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,避免使用内容耦合。
组合大于继承
command-query separation(CQS)——命令-查询分离原则
约定大于配置
law of demeter(LOD)—迪米特法则/最少知识原则
一个对象应该对其他对象保持最少的了解,只与自己熟悉的对象进行通信
single responsibility principle(SRP)—职责单一原则
一个类,只做一件事,并把这件事做好;
open/closed principle(OCP)—开闭原则/开放封闭原则
软件中的对象(模块、类、函数)应该对扩展是开放的,对修改是封闭的。
liskov substitution principle(LSP)—里氏代换原则
允许子类扩展父类没有的方法,但是不主张重写父类的方法
interface segregation principle(ISP)—接口隔离原则
把功能实现在接口中而不是类中,使用多个专门的接口比使用单一的总接口要好;
dependency inversion principle(DIP)依赖倒置原则
高层模块不应该依赖于底层模块的实现,而是依赖于高层抽象。