读书笔记——软件设计原则、设计模式
| 这个作业属于哪个课程 | 软件代码开发技术 |
|---|---|
| 这个作业要求在哪里 | 作业二 |
| 这个作业的目标 | 1.熟悉作业书写格式 2.熟悉软件设计原则和设计模式 3.尝试将设计原则和设计模式运用在编码过程中 |
一、归纳总结
软件设计原则
| 设计原则 | 定义 |
|---|---|
| 单一职责原则 | 一个类的职责只有一个,专门完成这项职责,不应该多于一项职责 |
| 开闭原则 | 软件应该对扩展开放,对修改关闭 |
| 里氏代换原则 | 一个软件如果使用的是一个基类,那么子类一定适用于基类,只有子类可以替换基类 |
| 依赖倒置原则 | 依赖抽象耦合,针对接口编程,而不是针对实现编程,一个具体类应该只实现接口和抽象类的方法,而不应当实现多余方法 |
| 接口隔离原则 | 不同类的接口应该分离,使用多个专门接口来替代一个总接口,过于臃肿的接口会导致出现不正常的耦合关系 |
| 聚合复用原则 | 在一个新对象里面使用已有的对象,能够达到复用已有功能的目的,尽量不要重新继承 |
| 最少知识原则 | 如果两个类不必直接通信,那么它们就不应当发生直接调用,可通过第三者作为媒介,在两者间传递方法 |
软件设计模式
设计模式有三大类型:创建型设计模式、结构型设计模式、行为型设计模式。
创建型设计模式
| 模式 | 特点 | 缺点 |
|---|---|---|
| 简单工厂模式 | 1.专门定义一个工厂类作为其他类的父类,工厂类包含必要的判断逻辑 | 1.由于集中了所有的逻辑,一旦出错则整个系统都会受影响,违背开闭原则,系统扩展困难 |
| 工厂方法模式 | 1.父类负责定义创建对象的公共接口,子类负责生成具体对象 2.该模式的核心是抽象工厂类,各种具体工厂类继承抽象工厂类并实现方法,从而客户只需关心抽象工厂类 3.可扩展性好 |
1.添加新产品时,需要编写新的具体产品类和对应的具体工厂类,增加系统复杂性 |
| 抽象工厂模式 | 1.提供了一个创建一系列相关或互相依赖对象的接口,无须指定它们的具体类 2.能够实现高内聚低耦合的设计目的 3.添加新的具体工厂类方便,符合开闭原则 |
1.产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改 |
| 单例模式 | 1.某个类只能有一个实例,它必须自行创建这个实例,它必须自行向这个系统提供这个实例 2.控制资源使用 3.控制实例产生的数量 4.实现数据共享 |
1.没有抽象层,难以扩展,必须修改原有代码 2.单例类职责过大,违背单一职责原则 |
结构型设计模式
| 模式 | 特点 | 缺点 |
|---|---|---|
| 适配器模式 | 1.将一个接口转换成客户希望的另一个接口 2.能将目标类和适配器类解耦 3.通过引入一个适配器类来重用现有的适配者类 4.增加了类的透明性和复用性,灵活性和扩展性好 |
1.不支持多重继承的语言,如Java、C# |
| 组合模式 | 1.将对象组合成树形结构 2.满足依赖倒置原则和开闭原则 3.清楚定义分层的复杂对象 |
1.设计会变得更加抽象 |
| 外观模式 | 1.要求外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统的一组接口提供一个一致的界面 2.能够对客户屏蔽子系统组件 3.实现子系统与客户之间的松耦合关系 4.降低大型软件系统中的编译依赖性,提供一个访问子系统的统一入口 |
1.不能很好地限制客户使用子系统类 2.增加新的子系统可能需要修改外观类,违背开闭原则 |
| 代理模式 | 1.给一个对象提供一个代理,并由代理对象控制对原对象的引用 2.能够协调调用者和被调用者 3.远程代理使得客户端可以访问在远程机器上的对象 4.虚拟代理通过一个小对象来代表一个大对象 5.保护代理可以控制对真实对象的使用权限 |
1.请求处理速度可能会变慢 2.实现代理模式需要额外工作,实现较为复杂 |
行为型设计模式
| 模式 | 特点 | 缺点 |
|---|---|---|
| 迭代器模式 | 1.提供一种方法来访问聚合对象,而且不用暴露内部结构,名为游标 2.支持以不同的方式遍历一个聚合对象 3.迭代器简化了聚合类 4.在同一个聚合上可以有多个遍历 5.添加聚合类方便,满足开闭原则 |
1.添加聚合类需要添加对应的新迭代器类,增加了系统的复杂性 |
| 观察者模式 | 1.定义了对象间的一种一对多依赖关系 2.可以实现表示层和数据逻辑层的分离,并定义稳定的消息更新传递机制 3.在目标和观察者之间建立一个抽象的耦合 4.支持广播通信 5.满足开闭原则 |
1.一个目标对象有很多观察者,那么会花费很多时间通知观察者 2.观察者和目标有循环依赖,一旦触发可能会导致系统崩溃 3.观察者不知道目标是怎么发生变化的 |
二、个人心得
在过往课程设计的代码编写中,我使用最多的是工厂方法模式和抽象工厂模式。由于项目的设计比较简单,所以使用最多的是工厂方法模式,该模式能够快速让系统成型,创建好父类即可对子类进行实现,在小型的项目中能够做到快速编码的作用。
我在开发中至少会遵循单一职责原则、开闭原则、依赖倒置原则、聚合复用原则。单一职责原则都会运用在类的设计中,我不会让类超出它的工作范围,这样在修改中能更快找出问题所在。使用聚合复用原则能让我的代码逻辑更顺畅,在一个类中实例化了一个对象,我会重复利用这个对象,而不是重新实例化另一个对象。
当然其他方法也应该熟悉,以便日后使用,在对项目进行需求分析中就要考虑使用怎样的设计模式,只有针对需求进行设计才能让后续的开发顺利进行。

浙公网安备 33010602011771号