找出变化并封装之;优先使用类聚集而不是类继承。
意图:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
所谓的实现部分,可以想象成一个功能库,这个库是用类来组织的,并且实现了你所需要的功能,而抽象部分正是使用这个库的类。
让他们独立变化的意思就是说,库增加或者使用库的代码改变都是在两边独立变化的,不影响另一边,就好像隔了个桥梁一样。
解决方案:为所有实现定义一个接口,供抽象类的所有派生类使用。
实现:
将实现封装在一个抽象类中;
在要实现的抽象的基类中包含一个实现的句柄。
遵循“一条规则,实现一次”策略。