背景
好久没看书了(怪不得你菜),源码又看不进去(好像你能看懂一样),来学学设计。上学的时候学过GoF四人组的设计模式,但是已经全还给老师了,一点都没剩。目前负责的这个系统,是我这个菜狗三年前从0开始搞的(刚毕业,感谢领导信任),经历了五六个开发同学的加工,现在已经是乱成一锅粥了。但生活还是要过下去,人一样,代码也一样,能好一点是一点(stop)。说回正题,听说这本写得非常不走寻常路,语言风趣幽默,引人入胜。看了个开头,名不虚传,经典就是经典。
豆瓣链接:Head First 设计模式(中文版)
1 设计模式入门:策略模式
设计模式:经验的复用
弹性的设计:可以维护,可以应对改变
继承并不能很好地解决问题:
对代码做的局部修改,影响层面被扩大:某些子类新增行为,为了复用而在父类中做新增,导致不具备该行为的其他子类受到影响 举例橡皮鸭不会飞,诱饵鸭不会飞也不会叫
另一个不好的方案是把行为抽象为interface,这样会造成重复代码过多
软件开发的一个不变真理--改变
不管当初软件设计得多好,一段时间之后,总是需要成长与改变,否则软件就会“死亡”
【设计原则】找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起:把会变化的部分取出并封装起来,以便以后可以轻易地改动或扩充,而不影响不需要变化的其他部分,代码变化引起的不经意后果变少,系统便得更有弹性
【设计原则】针对接口编程(针对超类型编程),而不是针对实现编程
封装好的接口是一个算法族,其具体实现为不同的算法,同一个算法族中的算法可以互换
【设计原则】多用组合,少用继承:在运行时动态地改变行为
【策略模式】定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户
设计是一门艺术,总是有许多可取舍的地方
OO基础(Head First Java):抽象、封装、多态、继承
OO原则:封装变化;多用组合,少用继承;针对接口编程,不针对实现编程;
OO模式:策略模式--定义算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户