读书笔记——软件设计原则、设计模式

这个作业属于哪个课程 软件代码开发技术
这个作业要求在哪里 作业二
这个作业的目标 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.观察者不知道目标是怎么发生变化的

二、个人心得

  在过往课程设计的代码编写中,我使用最多的是工厂方法模式和抽象工厂模式。由于项目的设计比较简单,所以使用最多的是工厂方法模式,该模式能够快速让系统成型,创建好父类即可对子类进行实现,在小型的项目中能够做到快速编码的作用。
  我在开发中至少会遵循单一职责原则、开闭原则、依赖倒置原则、聚合复用原则。单一职责原则都会运用在类的设计中,我不会让类超出它的工作范围,这样在修改中能更快找出问题所在。使用聚合复用原则能让我的代码逻辑更顺畅,在一个类中实例化了一个对象,我会重复利用这个对象,而不是重新实例化另一个对象。
  当然其他方法也应该熟悉,以便日后使用,在对项目进行需求分析中就要考虑使用怎样的设计模式,只有针对需求进行设计才能让后续的开发顺利进行。

posted @ 2022-03-04 16:03  MCGrey  阅读(83)  评论(0)    收藏  举报