读书笔记----软件设计原则、设计模式
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/2021Softwarecodedevelopmenttechnology |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/2021Softwarecodedevelopmenttechnology/homework/11833 |
| 这个作业的目标 | 了解软件设计原则、设计模式,养成良好的阅读习惯 |
参考书籍
《设计模式—可复用面向对象软件的基础》
读书笔记
1、可复用的面向对象设计的原则
(1)针对接口编程,而不是针对实现编程。不将变量声明为某个特定的具体类的实例对象,而是让它遵从抽象类所定义的接口。
(2)优先用对象组合,而不是类继承。理想情况下,你不应为获得复用而去创建新的构件。你应该能够只使用对象组合技术,通过组装已有的构件就能获得你需要的功能。但是事实很少如此,因为可用构件的集合实际上并不足够丰富。使用继承的复用使得创建新的构件要比组装旧的构件来得容易。这样,继承和对象组合常一起使用。
2、委托
委托(delegation)是一种组合方法,它使组合具有与继承同样的复用能力。举例来说,我们可以在窗口类中保存一个矩形类的实例变量来代理矩形类的特定操作,这样窗口类可以复用矩形类的操作,而不必像继承时那样定义成矩形类的子类。也就是说,一个窗口拥有一个矩形,而不是一个窗口就是一个矩形。窗口现在必须显式的将请求转发给它的矩形实例,而不是像以前它必须继承矩形的操作。

3、设计模式所支持的设计的可变方面
设计模式允许你独立变化的方面,你可以改变它们而又不会导致重新设计。

4、对变化的概念进行封装
在一给定平台上建立 Lexi 时,我们选择一个相应的版本。但想象一下,维护问题实在令人头
疼,我们已经保存了多个名字都是“Window”的类,而每一个类实现于一个不同的窗口系统。
另一种方法是为每一个窗口层次结构中类创建特定实现的子类,但这会产生我们在试图增加
修饰时遇到的同样的子类数目爆炸问题。这两种方法还都有另一个缺点:我们没有在编译以
后改变所用窗口系统的灵活性。所以我们还不得不保持若干不同的可执行程序。

既然这两种方法都没有吸引力,那么我们还能做些什么呢?那就是我们在格式化和修饰时都做过的:对变化的概念进行封装。现在所变化的是窗口系统实现。如果我们能在一个对象中封装窗口系统的功能,那么我们就能根据对象接口实现 Window 类及其子类。更进一步讲,如果那个接口能够提供我们所感兴趣的所有窗口系统的服务,那么我们无需改变 Window 类或其子类,也能支持不同的窗口系统。我们可以通过简单传递合适的窗口系统封装对象,来给我们想要的窗口系统设定窗口对象。我们甚至能在运行时刻设定窗口。
5、Bridge模式
WindowsImp类定义了一个公共窗口系统设施的接口,但它的设计师受不同于Windows接口的限制条件驱动的。应用程序员不直接处理WindowsImp的接口;他们只处理Windows对象。所以WindowsImp的接口不必与应用程序员的客观世界视图一致,就像我们只关心Windows类层次和接口的设计。WindowsImp的接口更能如实反映事实上提供的是什么窗口系统。它可以偏向于功能方法的交集,也可以偏向于功能方法的合集,只要是最适合各目标窗口系统即可。
要注意的是Windows类接口是针对应用程序员的,而WindowsImp接口是针对窗口系统的。将窗口功能分离到Windows和WindowsImp类层次中,这样我们可以独立实现这些接口。这些类层次的对象合作来实现Lexi无需修改就能运行在多窗口系统的目标。
Windows和WindowsImp的关系是Bridge模式的一个例子。Bridge模式的目的就是允许分离的类层次一起工作,即使它们是独立演化的。我们的设计准则使得我们创建了两个分离的类层次,一个支持窗口的逻辑概念,另一个描述了窗口的不同实现。Bridge模式允许我们保持和加强我们对窗口的逻辑抽象,而不触及窗口系统相关的代码。反之也一样,

心得体会
设计模式是一套被反复使用的、多数人知晓、经过分类编目的优秀代码设计经验的总结。
特定环境下特定问题的处理方法。
1)重用设计和代码 重用设计比重用代码更有意义,自动带来代码重用
2)提高扩展性 大量使用面向接口编程,预留扩展插槽,新的功能或特性很容易加
入到系统中来
3)提高灵活性 通过组合提高灵活性,可允许代码修改平稳发生,对一处修改不会
波及到其他模块
4) 提高开发效率 正确使用设计模式,可以节省大量的时间
浙公网安备 33010602011771号