设计模式系列-面向对象葵花宝典-面向对象技巧

本文探讨面向对象设计的核心概念,包括内聚与耦合、五大设计原则(SRP、OCP、LSP、ISP、DIP)及设计模式的应用。强调了在软件设计中寻找变化并正确封装变化的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计模式系列-面向对象葵花宝典-面向对象技巧

声明:本系列为面向对象葵花宝典一书学习总结内容,原作者博客链接


第三部分:面向对象技巧

8. 设计原则

8.1. 内聚和耦合

内聚
是否专注模块的职责,是内聚性的充要条件
是否与模块处理的内容相关

耦合
耦合(或者称依赖)是程序模块相互之间的依赖程度
内聚关注模块内部的元素结合程度,耦合关注模块之间的依赖程度

消息耦合 模块间的耦合关系表现在发送和接收消息
数据耦合 两个模块间通过参数(简单类型或者复杂类型)传递基本数据,称为数据耦合。
控制耦合 当一个模块通过某种方式( 传参)来控制另外一个模块的行为时,称为控制耦合
全局耦合 当两个模块共享相同的全局数据,称为全局耦合

8.2. 类设计原则

SRP(single responsibility principle)单一职责原则
用于类的设计
类的职责是站在其它类的角度来定义的
类的职责包含多个相关功能 一个类有多个方法,这些
方法是相关的
SRP不能应用于聚合类(多个职责类的组合)

OCP(Open-Closed Principle)开闭原则
总的指导思想
提供者(生产者)增加新的功能,但使用者(消费者)不需要修改代码
例如 A 类调用了B类的方法,则 A就是消费者,B就是生产者
所谓的增加新功能,并不是增加一个全新的功能,而是原有的功能有了替代实现

LSP(Liskov substitution principle)里氏替换原则
用于指导类继承的设计
针对父类的单元测试用例,传入子类是否也能够测试通过
同一个方法,子类可以有不同的实现,从而实现多态

ISP(Interface Segregation Principle)接口隔离原则
用于指导接口的设计
客户端不应该被强迫去依赖它们并不需要的接口
建议客户端不需要知道整个类,只需要知道具有内聚接口的抽象父类即可
实现接口的类,可以替换 方法中的接口参数

DIP(dependency inversion principle)依赖倒转原则
用于指导如何抽象
高层模块不应该直接依赖低层模块,两者都应该依赖抽象层(稳定的部分)
抽象不能依赖细节(变化的部分),细节必须依赖抽象(稳定的部分)
从不同的范围角度看,模块的范围不同 架构层-子系统 子系统-组件
高层模块基于抽象层编程 低层模块继承或者实现抽象层

不要过度设计

9. 设计模式

9.1. 设计模式简介
模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心”,即:模式是重复发生的问题的解决方案。

9.2. 设计模式只是一把锤子
两个主要约束
1)设计模式解决的是“可复用”的设计问题;
2)设计模式应用的领域是“面向对象”;

9.3. 设计模式之道
设计模式的“道”就是用来指导我们什么时候用设计模式,为什么要用设计模式,
23 个设计模式只是告诉了我们 how,而设计模式之道却可以告诉我们 why 和 where!
八字精解:找到变化(where),封装变化(why)
“封装变化”意味着将变化的影响范围控制最小,将风险降到最低(不是拒绝变化)

9.4. 原则 VS 模式
设计原则主要用于指导“类的定义”的设计
设计模式主要用于指导“类的行为”的设计

9.5. 模式详解

学习设计模式
学习设计模式的时候,我们必须深入理解某个设计模式是为了解决什么变化引起的问题,
然后再看这个设计模式是如何应用“两个基本点”对应的原则来封装这个变化的。

应用设计模式
在实际应用的时候,我们不要一开始就想着要把某个模式塞到某个地方,
而是先找到可能变化的地方,再来看具体使用哪个模式可以封装这种变化。

模式讲解-案例
装饰模式
更多模式请查看原书讲解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值