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