前言
好久没有写 blog 了,上一篇 paper 看了太久了,中途把 Terraria 完成了全成就,追了 2 季的 Agents of SHIELD, 简直要多飘有多飘。之后会写一篇关于学习与娱乐的反思。
其实之前想做 苏菲的世界 的读书笔记,但是之后一直也没有读,也就作罢,从昨日正式开学,时间又会少了很多,给自己定个小目标一周保底一篇吧,免得之后又把这些都扔掉。
Head First 系列之前读过 Head First Java ,感觉非常不错。是大学期间除了教材少数完全读完的书。 Head first 系列注重刺激大脑,保持清醒与注意力,提高学习效率等,有着一套自己的理论,就个人体验来说还是非常不错的。而且相比满页满满当当全是字的书,这个系列的书有着大量的插图,读起来很快,容易让读者保持 膨胀 信心。
Head First Design Pattern 以 Java 为例,介绍设计模式,内容偏向 软件开发。
正文
文中举了例子说明问题,下面是大概内容:几个子类要添加一个共同的新功能,如果直接在父类上添加该功能,是一个讨巧的方法,但是可能会导致一些其他本不该拥有该功能的子类获得该功能。如果把这些功能写成 Interface ,让有这些功能的子类自行实现 Interface,就会发现越来越多的子类,每个有这个功能的子类都要实现一遍,会带来大量代码冗余。此外冗余还会带来额外的问题:修改功能时更为困难等。
这里本书引出了第一个 Design Principle。
DESIGN PRINCIPLE
Identify the aspects of your application that vary and separate them from what stays the
same.…
Here’s another way to think about this principle: take the parts that vary and
encapsulate them, so that later you can alter or extend the parts that vary
without affecting those that don’t.
给出的具体解决方法为 针对会变动的功能,单独实现一套不同的类,把其余不变的特性维持在父类里。然后我们针对会变动的功能,编写函数能够让实例动态更新功能。具体而言相同一套类实现同样的接口, 而在最初的父类中添加接口类型的成员变量,然后对于特定子类特定功能,在构造函数中为成员变量赋值。
DESIGN PRINCIPLE
Program to an interface, not an implementation.
施工中……