一.继承可能造成的问题有:
1.很难知道一个基类应该具有的合理的行为集合
2.后续设计中对于基类的改变,牵一发而动全身
二.相比于基类继承,抽象出一些接口似乎能更好的解决一中提到的问题1,2;但代码重用性变差了
那么如何更好的设计一个类体系呢?让不变的东西,可以得到重用,让变化的东西可以实现灵活性,同时也不会使得代码的重用性变差。。。
三.做法:
1.让确定不变的东西放在基类中,实现更好的代码重用和逻辑上的继承关系。
2.让变化的东西实现灵活性,我们可以对变化的东西进一步抽象为接口,采用组合的方式在基类中放入变化东西的接口。
3.同时为了实现代码的重用性,我们对每一种变化的类型设计一个类,通过组合,这个类只需要写一份代码就可以使用在各个地方。
4.我们可以在基类的子类中对接口进行赋值,可以直接在构造函数中对其赋以需要的实现接口的类,但为了不对实现编程,我们其实更好的做法是实现一些set方法,动态地设定那些变化的类,以及在今后还会学到工厂模式。
继承,接口,组合的综合使用,使得我们能够获得更好的类体系结构。
四.设计原则总结:
1.抽取变化的模块,与不变的模块分离
2.针对接口编程,而不是针对实现编程
3.多用组合,少用继承
五.策略模式(Strategy Pattern)的定义:
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。