背景问题:假设我们现在接到一个来自气象台的软件开发合约,对方希望我们开发一个天气预报类的软件。假设需要建立三种布告板,分别显示目前的状况,气象统计及简单的预报。当气象台提供的WeatherObject对象获得最新的测量数据时,三种布告板必须实时更新。如气象台所说,他们的WeatherData源文件中有getTemperature( ),getHumidity( ),getPressure( ),measurementsChanged( )。对于前三个方法各自返回最近的气象测量数据,我们不用在乎这些方法如何设置变量,WeatherData对象自己知道如何从气象台获取更新。而最后一个方法作为一个线索..
这篇博文是对前一篇博文《设计模式1:找出应用中可能需要变化之处,把它们独立出来》的一个延伸思考:在鸭子里建立了一堆动态的功能没有用到,太可惜了!假设我们想在鸭子子类中通过“设定方法(setter method)”来设定鸭子的行为,而不是在鸭子的构造器内实例化,那应该如何操作呢?
1.首先我们要在Duck类中加入两个新的方法:
Duck类(Duck.java)(粗体为新加入的两个方法)
public abstract class Duck { FlyBehavior flyBehavior; Q..
前景问题:
有时,想着只需要在基类中加上自己所需要的方法,所有子类就会继承该方法。但是对代码所做的局部修改,影响层面可能不是局部。你会体会到一件事:当涉及“维护”时,为了“复用”(reuse)目的而使用继承,结局并不完美。
这时,你会考虑:利用接口如何?把自己想要添加的方法从超类中取出来,放进一个“XXXable接口”中。这么一来,只有想要实现该方法的子类才实现该接口。这样如何?这真是个超笨的注意!你没有发现这么一来重复的代码会变多吗?这其实和使用继承时无止境的覆..