设计模式-行为模式-模板方法模式

119 阅读2分钟

设计模式

设计模式分为创建型模式、结构型模式和行为型模式。
创建型模式:创建对象。
结构型模式:把复杂结构分解为多个类,分解的是类本身(包括算法和属性)。
行为型模式:把复杂算法分解到多个类,分解的是算法。

行为模式-模板方法模式

模板方法模式就是把算法的实现放到子类中,然后在父类中定义一个模板方法,这个模板方法调用子类的算法实现。

UML 图

模板方法模式的 UML 图

示例代码

// 抽象类
abstract class AbstractClass {
    // 模板方法
    public void templateMethod() {
        primitiveOperation1();
        primitiveOperation2();
    }

    // 抽象方法 1
    abstract void primitiveOperation1();

    // 抽象方法 2
    abstract void primitiveOperation2();
}

// 具体类1
class ConcreteClass1 extends AbstractClass {
    @Override
    void primitiveOperation1() {
        System.out.println("具体类1方法1实现");
    }

    @Override
    void primitiveOperation2() {
        System.out.println("具体类1方法2实现");
    }
}

// 具体类2
class ConcreteClass2 extends AbstractClass {
    @Override
    void primitiveOperation1() {
        System.out.println("具体类2方法1实现");
    }

    @Override
    void primitiveOperation2() {
        System.out.println("具体类2方法2实现");
    }
}

// 客户端
public class TemplateMethodPattern {
    public static void main(String[] args) {
        AbstractClass abstractClass = new ConcreteClass1();
        abstractClass.templateMethod();
        abstractClass = new ConcreteClass2();
        abstractClass.templateMethod();
    }
}

输出:

具体类1方法1实现
具体类1方法2实现
具体类2方法1实现
具体类2方法2实现

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

模板方法基于继承机制: 它允许你通过扩展子类中的部分内容来改变部分算法。
策略模式基于组合机制: 你可以通过对相应行为提供不同的策略来改变对象的部分行为。
模板方法在类层次上运作, 因此它是静态的。
策略在对象层次上运作, 因此允许在运行时切换行为。

访问者模式和策略模式的区别

访问者模式: 多(对象)对多(算法)
策略模式: 一(对象)对多(算法)