最近在学习命令模式。
例子中是定义一个Command接口,其中只有一个execute方法声明。
接口的实现
因为接口是不指定构造方法的参数,也不指定成员变量的。所以你可以用任何形式实例化这个接口,只要其中实现了这个接口方法。
比如说开灯命令里面的execute中只要把light.on()方法写进去就可以了。而如果是播放cd命令的execute中就要写打开cd,放入碟片,调节音量等一系列操作。
二者却是联系的
这种执行逻辑的拓展是无法用同一个类的不同的对象实现的。当然,除非不同的对象中传入了不同的包含有execute方法的实现的对象,就如同OnClickListener。那就跟实现这个类一样了,不过是换了一个类,终究还是在不同的实现中完成的。
而同一个对象的不同的实例,不能改变自身的的方法的逻辑的具体实现。但是却可以接受不同的实现的对象来实现不同的逻辑。比如所不同的Button类的不同对象,setOnClickListener传入不同的OnClickListener,那么他们是同一个类的不同的实现。但是他们执行的onClick方法的逻辑却不相同。因为他们的这部分逻辑是调用的OnClickListener中的onClick方法的实现。
哲学一般的总结
同一个类的不同对象其终究意义在于其各个属性不同。而一个方法的执行的不同也是最终指向了不同的属性结果,只不过这种属性基于了调用的可能,基于了给想要改变的时候和改变者改变的时候,再进行改变。如果一个变化在时间上需要积分才能得出的结果。
那么站在时间的终端来看,不同的方法和不同的简单属性都是属性的不同。不同的OnClickListener有不同的onClick方法的实现,就相当于有不同的属性。不同的Button持有不同的OnClickListener,也就是持有不同的属性,从而导致持有不同的方法实现,这些方法的实现,在时间的终端仍然是属性。