对接口编程而不是对实现编程。
优先使用对象组合而不是继承。
六大原则
单一职责原则
前端写页面,后端写逻辑。
即: 只负责自己分内之事,让单个模块更简单且复用,高内聚。
开闭原则
实现一个热拔插的效果, 当程序增加了新的功能时, 不能修改原来的代码。
即: 开放扩展,拒绝修改。 增加扩展性可复用性与系统稳定。
里氏替代原则
基类可以出现的地方,子类也一定可以出现。
即: 设计接口时要满足: 任何子类实现都可以在其抽象与高层抽象中自由的替换,且无错误。 增加了可替换性,功能无限延伸。
接口隔离
客户端依赖需要的最小接口。
类似于单一职责, 避免过大的接口设计。
依赖倒置
高层模块不依赖具体实现, 只依赖于上层抽象。
高层模块与底层模块进行解耦,符合里氏替代原则。
迪米特法则
最少知识原则,模块之间应该保持陌生,拒绝过多关联,屏蔽细节。
常用23种设计模式分类
创建型设计模式
创建对象且屏蔽复杂创建细节。
1.1 工厂方法模式
简单工厂:使用工厂if-else创建对象,屏蔽对象的创建细节,实现业务与创建对象的解耦, 无法扩展。
工厂方法:解决if-else问题, 建立多个工厂,当有新的产品时,只需要建立一个新的工厂实现工厂接口。
1.2 抽象工厂模式
缩减工厂方法实现子类的数量,将产品进行分组,每组中的不同产品,通过不同的抽象方法来进行创建和组合。
1.3 单例模式
系统中只存在某个类的唯一一个实例,提供统一的访问接口。
1.4 创建者模式
当对象复杂时,将多个组合对象通过一系列的工序进行组装对象。 工厂创建的是单一产品(产品的意思和对象的意思不同),创建者(建造者)创建的是复合产品。
1.5 原型模式
通过对象创建对象,不需要经过复杂的过程实现复制的对象。
结构型模式
关注类和对象的组合,获取新的功能。
2.1 适配器模式
适配器也叫做转换器,中间转换的角色,进行解耦两端的连接。 ex: type-c转3.5mm 转接器。
2.2 过滤器模式
标准模式,允许增加不同的标准来进行过滤一组对象内容。
2.3 桥接者模式
解决继承会造成类爆炸问题, 将抽象类组合一个实现类接口,然后组合他们的功能。
2.4 组合模式
把一组相似的对象看做一个对象。 ex: 类目树
2.5 装饰器模式
类似于继承后使用super(), 不过是在运行时去给对象进行包装增加新的功能。 增强本身的能力。
2.6 门面模式
外观模式,屏蔽一个系统的实现细节,将不同的子系统的内容进行组合,提供高层的接口,使功能简单易用。
2.7 代理模式
一个接口,他的实现被例外一个实现组合。然后进行增强。 即 被代理对象被代理对象进行控制了。
2.8 享元模式
将对象进行缓存起来。
行为模式
关注对象之间的通信。
3.1 责任链模式
将发送者和多个处理者进行解耦,多个处理者组成一个链表,发送者不需要关心处理的逻辑与细节。
3.2 命令模式
感觉就是用了桥接模式去替代if-else判断。 暂时不是特别理解这个。
3.3 中介者模式
解决网状关系,建立一个中间者来将多方关系解耦。 ex: 微信聊天群。
3.4 备忘录模式
保存对象的快照。可以用来进行恢复。 ex: control + z
3.5 迭代器模式
ex: Iterator 接口
3.6 解释器模式
解析定义的内容,ex: 将json解析为对象,将java 解析成 class
3.7 观察者模式
生产者(被观察者)主动推送给 多个消费者(观察者)。 生产维护一个List
3.8 状态模式
将状态切换的逻辑抽离出实体本身。 状态模式关注的是实体本身的状态与行为的转变
3.9 模板模式模式
定义一个流程,父类中可以写公共的内容,实现类只需要实现自己的逻辑就可以形成完整标准的流程。 复用。
3.10 访问者模式
将行为和数据进行分离。 不知道实际应用是什么