可以看到 Strategy 模式和 Template 模式解决了类似的问题,但是 Strategy 模式是将逻辑(算法)封装到一个类,并采取组合(委托)的方式解决这个问题,而 Template 是采用继承的方式实现这一点:将逻辑(算法)框架放在抽象基类中,并定义好细节的接口,子类中实现细节。Strategy 和 Tmeplate 模式实际是实现一个抽象接口的两种方式:继承和组合之间的区别。要实现一个抽象接口,继承是一种方式:我们将抽象接口声明在基类中,将具体的实现放在具体子类中。组合(委托)是另外一种方式:我们将接口的实现放在被组合对象中,将抽象接口放在组合类。