模板模式和策略模式的区别

    技术2025-11-13  13

    设计模式的原则 1、"开-闭"原则——模块应对扩展开放,而对修改关闭。 2、里氏代换原则——如果调用的是父类的话,那么换成子类也完全可以运行。里氏代换原则是继承复用的一个基础。 3、合成复用原则——要少用继承,多用合成关系来实现。 4、依赖倒转原则——抽象不应该依赖与细节,细节应当依赖与抽象。                    要针对接口编程,而不是针对实现编程。 5、接口隔离原则——每一个接口应该是一种角色,不多不少,不干不该干的事,该干的事都要干。 6、抽象类 7、迪米特法则——最少知识原则。不要和陌生人说话。

    Strategy模式的应用场景是: 1. 多个类的分别只是在于行为不同 2. 你需要对行为的算法做很多变动 3. 客户不知道算法要使用的数据

    Template Method模式的应用场景是: 1. 你想将相同的算法放在一个类中,将算法变化的部分放在子类中实现 2. 子类公共的算法应该放在一个公共的类中,避免代码重复

     

    设计模式中有这么一个原则: Prefer composition to inheritance.

    Strategy模式允许外界使用其接口方法,因而可以将这个接口方法认为是"一整个算法";而Template Method模式可以限制所留下的虚方法只对其继承类可见,外部使用者不一定能够直接使用这些虚方法,因而可以将这些虚方法认为是"一个算法的一部分".GoF的设计模式那本书里有这么一句话:"Template methods use inheritance to vary part of an algorithm. Strategies use delegation to vary the entire algorithm.",说的正是这个问题.回到具体问题上,如果我们要封装的算法适合于提供给用户任意使用,是"一整个算法",那么用Strategy 模式较好;如果要封装的变化是一个算法中的部分(换言之,大算法的步骤是固定的),而且我们不希望用户直接使用这些方法,那么应该使用Template Method模式.

    最新回复(0)