一、设计原则
六大原则即:高内聚低耦合。
- 高层不直接依赖基础:依赖倒置原则
- 内部修改关闭,外部开放扩展:开闭原则
- 聚合单一功能:单一原则
- 低知识接口,对外接口简单:迪米特法则
- 互连多个接口,不如隔离拆分:接口隔离原则
- 合并复用,子类可以替换父类:里氏替换原则
二、设计模式
一、创建型
创建型从功能上来说就是创建元素,目标是规范元素步骤创建
1. 构造器模式:抽象了对象实例的变与不变(变的是属性值,不变的是属性名)
2. 工厂模式:为创建一组或相互依赖的对象提供一个接口,且须指定它们的具体类。即隐藏创建过程、暴露共同接口。
- 特点:封装对象创建过程,由子类决定实例化哪个类。
- 优点:提高模块独立性,易于扩展。
- 缺点:类数量可能急剧增加,工厂类可能过于庞大。
- 应用场景:数据库连接、GUI组件、支付网关等。
3. 单例模式:全局只有一个实例,避免重复创建对象,优化性能
- 特点:确保一个类只有一个实例,并提供一个全局访问点。
- 优点:保证资源或状态的全局唯一性,减少资源消耗。
- 缺点:反模块化,测试困难。
- 应用场景:配置管理器、连接池、日志记录器等。
二、结构型
结构型从功能上来说就是给元素添加行为的,目标是优化结构的实现方式
1. 适配器模式:车辆独立模块,保证模块间的独立解耦且连接兼容
- 特点:使不兼容接口能一起工作。
- 优点:增加兼容性,客户端代码无需修改。
- 缺点:系统复杂,可能引入性能开销。
- 应用场景:系统集成、第三方库集成等。
2. 装饰器模式:动态将责任附加到之上对象
- 特点:动态地给对象添加额外职责或功能。
- 优点:增加职责动态且可撤销,多个装饰者可组合使用。
- 缺点:系统复杂,可能影响性能。
- 应用场景:日志记录、缓存、安全控制等。
3. 代理模式:使用代理来替代原始对象处理更专业的事情
- 特点:为另一个对象提供代替或占位符,控制访问。
- 优点:降低耦合度,增加可控性,代码可扩展。
- 缺点:增加系统复杂性,可能引入性能开销。
- 应用场景:访问控制、延迟初始化、远程代理等。
4. 组合模式
- 特点:将对象组合成树状结构,一致对待单个对象和组合。
- 优点:简化客户端代码,更好的层次结构表示。
- 缺点:设计复杂,需要合理设计接口和类。
- 应用场景:文件系统、组织结构、GUI组件等。
三、行为类型
不同对象之间责任的划分和算法的抽象化
1. 观察者模式:当一个属性发生变化时,观察者会连续引发所有的相关状态变化
- 特点:定义对象间一对多的依赖关系,自动更新依赖对象。
- 优点:降低耦合度,扩展性好。
- 缺点:可能造成性能问题,系统难以维护。
- 应用场景:事件监听系统、UI更新、消息系统等。
2. 模版模式:在模版中,定义好每个方法的执行步骤。方法本身关注于自己的事情
3. 命令模式:请求以指令的形式包裹在对象中,并传递给调用对象
- 特点:将请求或操作封装为对象,解耦发送者和接收者。
- 优点:降低耦合度,增加操作灵活性,易于扩展。
- 缺点:可能产生大量命令类。
- 应用场景:事务处理、撤销操作、日志请求等。
4. 策略模式
- 特点:定义算法家族,封装起来,互相替换。
- 优点:算法变化独立于客户端,易于添加新算法。
- 缺点:客户端需要了解策略类差异。
- 应用场景:算法选择、支付方式、排序算法等。
5. 迭代器模式
- 特点:顺序访问聚合对象元素,不暴露内部表示。
- 优点:抽象化集合访问,支持多种遍历方式,增加灵活性。
- 缺点:增加系统复杂性,需要额外代码实现迭代器。
- 应用场景:遍历集合、数据结构、数据库查询等。