郑政 | 2021软件代码开发技术作业二 | 读书笔记----软件设计原则、设计模式
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/2021Softwarecodedevelopmenttechnology |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/2021Softwarecodedevelopmenttechnology/homework/11833 |
| 这个作业的目标 | 1. 帮助我们更好地了解“好味道”的代码风格 |
| 2. 帮助我们了解更多软件设计原则和设计模式 | |
| 3. 帮助我们提升总结概括能力 | |
| 4. 帮助我们学会在学习中提问题 | |
| 5. 帮助我们养成看书的好习惯 | |
| 6. 帮助我们找出自身不足,便于更好地提升和改进 | |
| ------------------------------------------------------------------------------------------------------- |
个人信息
| 学号 | 姓名 | 班级 | 别名 |
|---|---|---|---|
| 3118005169 | 郑政 | 软件工程五班 | Ching |
-------------------------------------------------------------------------------------------------------
书籍详情
| 书名 | 主编 | 出版社 | 内容简介 |
|---|---|---|---|
| 《软件秘笈:设计模式那点事》 | 郑阿奇 | 电子工业出版社 | 本书是在2011年由电子工业出版社出版的书籍,全书在对设计模式进行概述后,诠释了23个软件设计模式,并对各类软件设计模式进行了总结,描述了各种软件设计模式综合应用 |
-------------------------------------------------------------------------------------------------------
读书笔记
- 总结归纳:设计模式是根据经验总结出包含软件所需的基本要素且可以重复使用的一套设计模板,根据不同的情境和阶段要运用不同的设计模式,且运用设计模式要遵循相关的设计原则。
|----------------------------|
(1)引用设计模式必要性:
|----------------------------|
| 必要性 | 概括 | 理解 |
|---|---|---|
| (1) | 帮助解决实践中问题 | 设计模式本质上是长时间实践中得出的开发经验和总结,可以起到借鉴的作用,就好比如平时我们遇到一些不知道如何解决的问题往往会请教有相同经历的同学请求帮助,模式则起到了为我们提供解决方式的作用 |
| (2) | 提高软件质量 | 良好的设计模式可以理解成是结实的脚手架,程序员只需要在大的框架下添砖加瓦即可,这相当于给程序员指定了大方向而使开发的软件朝着既定方向发展而不是偏离需求,提升软件开发质量和可用性 |
| (3) | 降低软件维护成本 | 采用约定的设计规模可以让同团队的成员更好地读懂代码,增强软件可读性,方便团队成员间相互修改代码减少理解代码所需花费时间,便于维护和管理软件代码,从而降低软件维护成本,提高利润和工作效率 |
|----------------------------|
(2)设计模式的各类原则:
|----------------------------|
| 原则 | 概况 | 理解 |
|---|---|---|
| (1) | 高内聚低耦合 | 同一模块元素关联性强,不同模块间关联性低。各模块相互独立,使其平时各司其职,需要时则相互协作 |
| (2) | 面向抽象编程 | 面向抽象而非具体对象编程可以使代码具有更好的复用性,好比如宽泛的概念可以引申出多个方面则减少了面对不同情景代码的编写,使代码一次编写可以多次使用,也减少了出错的机率 |
| (3) | 多用组合少用继承 | 软件好比人类,若儿子总是依赖父代传授的技能而不学会和他人合作的话,那么他需要很多不同的父代教他很多,而学会和他人合作则能更灵活地发挥各自的特长,达到事半功倍,随着软件规模加大继承会变得臃肿而组合则能保持其灵活性 |
| (4) | 开放扩展关闭修改 | 在保持本心的前提下修改,既在尽量不改变原有代码的前提下去扩展代码 |
|----------------------------|
(3)设计模式的分类:
|----------------------------|
选择技巧:先通过项目范围或者目标来分类,然后再根据实际情况选择合适的设计模式。

|----------------------------|
(4)设计模式举例分析:
|----------------------------|
因本书涉及设计模式较多,现就个别经典模式进行分析介绍:
1.>>工厂模式:通过定义一个创建产品对象的接口来把创建实例对象的工作推迟到子类中进行,核心类不再负责实例对象创建,实现开闭原则,既开放扩展,关闭修改。
VVVVV**······>模式结构图<······**VVVVV

VVVVV**·······> 分析<·······**VVVVV
上图借用了三国曹操借刀刺杀董卓的案例,其中制刀厂类和刀类都是项目中抽象的核心类,一般而言我们会直接
通过父类来创建对象,但工厂模式则通过创建生产的借口使创建实例对象的工作推迟到子类中进行,既核心类不
再负责具体对象的创建,这样做的好处是可以避免核心类的修改,但同时也可以满足扩展的需求,满足开闭原则,
利于应用于更复杂层次结构和产品结构复杂的情况。
VVVVV**······> 适用情景<······**VVVVV
-
因其严格遵守开闭原则,可做到开放扩展,关闭修改,适用于系统框架设计阶段尚未明确开发过程中需要实
例化哪些具体对象或系统设计没有具体对象概念的时候。 -
因其把核心类抽象为类似于生产工厂接口,把创建实例对象的工作推迟到子类中进行,核心抽象类一般不
进行修改,所以也适用于系统子类较多,或未来开放需要不断添加不同子类的情况。
|----------------------------------------------|
(5)设计模式--“工厂模式”应用实例代码:
|----------------------------------------------|
》》------定义一个披萨接口及大中小披萨类------《《

--------------------------------------------------------------
》》------定义大中小披萨工厂类------《《
--------------------------------------------------------------



--------------------------------------------------------------
》》------定义一个披萨工厂接口------《《
--------------------------------------------------------------

--------------------------------------------------------------
》》------客户类------《《
--------------------------------------------------------------

--------------------------------------------------------------
》》------运行结果------《《
--------------------------------------------------------------

-------------------------------------------------------------------------------------------------------
心得体会
(1)设计模式原则:
- 在未了解设计模式这个概念之前,我在实际应用开发实际中也会遵守高内聚低耦合的设计原则,尽量使一个模块只负责一种功能,避免模块之间关联性过强,因为当各模块关联性过强时我会经常搞不清楚应该调用哪个模块来实现功能,导致开发耗时很长且容易搞乱自己的思维,影响代码开发质量。
- 在实际应用中我会更多地选择继承,这导致当系统子类较多或者所需子类不确定抑或是后期需要增添大量子类时需要不断修改父类代码,而学习本书之后我明白了“多用组合少用继承”的原则,让自己眼前一亮的同时,也让自己掌握了一个新的设计方式,采用组合去实现要比继承更为高效且实用。
- 在未看本书之前我在实际开发过程中也会遵循“面向抽象开发”的设计原则,因为通过面向抽象对象编程可以使代码具有更好的灵活性和复用性,当需要创建实例对象时只需要通过根据实例对象对应的抽象概念来选择抽象类来创建实例对象即可,宽泛概念可以引申出多个方面,从而减少代码的编写,也减少代码出错的机率。
- 不得不承认,在开发软件过程中采用设计模式相对于不使用设计模式进行开发的时间成本要更好,因为除了单纯实现之外,程序员还需要考虑开发设计是否符合各类设计原则或者是否符合设计模式的要求,但大多数情况下通过使用设计模式进行开发的软件系统可维护性、稳定性等特性都要比不使用设计模式或者不遵循设计原则开发的软件系统要更好,所以前期花费更多的时间成本是很有必要且值得的,前期的牺牲可以换来后期更多时间和人力的节省。
| 代码健壮性 | 代码可复用性 | 维护难度 | 代码灵活性 | 系统维护成本 | |
|---|---|---|---|---|---|
| 遵循设计原则 | 强 | 强 | 低 | 好 | 低 |
| 不遵循设计原则 | 弱 | 弱 | 高 | 差 | 高 |
(2)设计模式运用:
- 在学习完本书之后,我也试着把所学到的比较适用的一些设计模式,比如工厂模式运用实际项目开发中,我将项目原来的采取通过父类来创建实例对象改成了推迟到子类中去实现,让父类不再负责实际对象的创建,既满足开放扩展而关闭修改的原则,同时采用把原来依赖继承实现功能改成了通过组合实现功能,更好地改善了代码的灵活性和可复用性,让自己的代码风格更加立体可借鉴,但书中还有一些设计模式还未完全理解,还有待进一步学习和提高。
-------------------------------------------------------------------------------------------------------
后台编辑截图


浙公网安备 33010602011771号