哈,今天第一次发博客哈。。。
嗯,虽然一直都想发博客来记录自己的学习中的收获或者困难,但自己这个人一直比较懒,所以也老是想想就算了。
碰巧最近比较悠闲,也终于可以抽出时间来记录一些东西。请注意,我没用分享这个词而是用的记录。因为一直觉得自己比较菜,写的东西只能自己看看,误导了别人就不好了。当然如果对别人有所帮助那我也蛮开心的。也挺希望可以和大家多交流,多沟通,提高自己。
==================================分割线===============================
好了,不废话了。今天呢,主要是将自己最近看的一本书《Head First 设计模式》中学到的关于设计模式的一些收获总结一下。
嗯,就按原书的顺序来吧,首先说一下策略模式。。。
我们都知道,我们应该把一些常用的,共有的方法或者变量放在超类里,然后在子类里不断扩展其它行为。扩展的行为你会怎么做呢?先放在超类里?然后在子类中覆盖?
嗯,大概一般有点经验的同学都不会这样做吧?举个例子,A是一个超类,B,C都是A的子类。如果B现在要扩展一个行为,那么如果在一开始就在A中加入这个行为,那么你要在
C类中覆盖这个方法并且什么都不做。听起来有点怪异哈。而且如果有很多像C这样的类,你就得一个个去覆盖这个方法并把方法体内留空。。。。
然后有的同学说用接口啊。嗯,已经很接近了。用接口的确可以解决一部分问题。现在我们可以对某个特定的子类扩展一些方法,并且不用担心影响到其它子类。但问题是这样
代码的复用效率是极低的。想一想,如果B,C都要扩展同一种行为,那么你还要在B,C中分别实现一个接口,然后写一样的代码。。。记得以前看过一句话:永远不要写重复的代码!尽管说得比较绝对,但好的程序确实应该降低代码的重合度。不仅为了后面维护,还为了代码的整洁。
说到这里,想必大家都想到解决办法了,就是把接口的实现类单独放在一边。然后在超类里放一个接口变量,在子类里动态地设置接口的实现类的变量。不仅灵活度大多了,而且还可以实现代码复用。
==========================================分割线====================================
第一次写博客哈,如果有什么写得不好的地方希望大家多多指正。。。。