设计模式之模板模式

发布时间:2022-07-05 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了设计模式之模板模式脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

模板模式的使用场景:当我们要完成在某一个细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,可以考虑用模板方法来处理。

 

模板方法:在模板中,定义一个操作中算法的骨架(一般为重复的代码),而将一些步骤(不同的代码) “延迟”到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤。

设计模式之模板模式

模板方法的优点:模板方法通过把不变行为搬移到超类(父类),去除子类中的重复代码来实现代码的复用。

例子:

抽象模板

package TemplateMethodPattern;

/**
 * 模板方法模式:抽象模板类
 */
public abstract class AbstractTemplate {
    /**
     * 模板方法:算法的整体框架(相同的部分)
     */
    public void templateMethod() {
        PRimITiveoperation1();
        primitiveOPEration2();
        concreteMethod();
    }

    /**
     * 申明抽象基本方法,由子类具体实现
     * protected 修饰不同包的子类
     */
    protected abstract void primitiveOperation1();

    /**
     * 申明抽象基本方法,由子类具体实现
     */
    protected abstract void primitiveOperation2();

    /**
     * 基本方法
     */
    private void concreteMethod() {
        System.out.println("这是父类的基本方法.");
    }
}

模板的子类实现A

package TemplateMethodPattern;

public class ConcreteTemplateA extends AbstractTemplate {
    @override
    protected void primitiveOperation1() {
        System.out.println("具体模板类A的实现方法1");
    }

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

模板的子类实现B

package TemplateMethodPattern;

public class ConcreteTemplateB extends AbstractTemplate {
    @Override
    protected void primitiveOperation1() {
        System.out.println("具体模板类B的实现方法1");
    }

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

客户端测试

package TemplateMethodPattern;

public class testTemplateMethod {
    public static void main(String[] args) {
        AbstractTemplate abstractTemplate = new ConcreteTemplateA();
        abstractTemplate.templateMethod();

        abstractTemplate = new ConcreteTemplateB();
        abstractTemplate.templateMethod();
    }
}

 

脚本宝典总结

以上是脚本宝典为你收集整理的设计模式之模板模式全部内容,希望文章能够帮你解决设计模式之模板模式所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。