Template Method 设计模式--模板方法

本文详细介绍了模板方法模式的概念、实现及应用场景。通过定义一个操作中的算法骨架,将一些步骤延迟到子类中实现,使子类可以不改变算法结构即可重新定义算法的某些特定步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模板方法示意图

在这里插入图片描述

概念

模板方法模式,定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。

模板方法模式的基本代码实现

根据上面的结构图,我们可以用代码来进行实现
AbstractClass(抽象模板):
package com.jxs.templateMethod;

/**

  • Created by jiangxs on 2018/5/7.
    */
    public abstract class AbstractClass {

    public abstract void primitiveOperation1();

    public abstract void primitiveOperation2();

    // 模板方法,给出了逻辑的骨架
    // 而逻辑的组成是一些相应的抽象操作,他们都推迟到子类实现
    public void templateMethod() {

     primitiveOperation1();
     primitiveOperation2();
     System.out.println("");
    

    }
    }
    ConcreteClass(实现父类所定义的一个或多个抽象方法)
    ConcreteClassA:

    package com.jxs.templateMethod;

/**

  • Created by jiangxs on 2018/5/7.
    */
    public class ConcreteClassA extends AbstractClass {

    @Override
    public void primitiveOperation1() {

     System.out.println("具体类A方法1实现");
    

    }

    @Override
    public void primitiveOperation2() {

     System.out.println("具体类A方法2实现");
    

    }
    }
    ConcreteClassB:
    package com.jxs.templateMethod;

/**

  • Created by jiangxs on 2018/5/7.
    */
    public class ConcreteClassB extends AbstractClass {

    @Override
    public void primitiveOperation1() {

     System.out.println("具体类B方法1实现");
    

    }

    @Override
    public void primitiveOperation2() {

     System.out.println("具体类B方法2实现");
    

    }
    }
    客户端
    package com.jxs.templateMethod;

/**

  • Created by jiangxs on 2018/5/7.
    */
    public class Client {

    public static void main(String[] args) {

     AbstractClass c;
    
     c = new ConcreteClassA();
     c.templateMethod();
    
     c = new ConcreteClassB();
     c.templateMethod();
    

    }
    }
    模板方法模式的总结
    (1)模板方法模式的优点
    ①模板方法模式通过把不变的行为搬移到父类,去除了子类中的重复代码。
    ②子类实现算法的某些细节,有助于算法的扩展。
    ③通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。

(2)模板方法模式的缺点
按照设计习惯,抽象类负责声明最抽象、最一般的事物属性和方法,实现类负责完成具体的事务属性和方法,但是模板方式正好相反,子类执行的结果影响了父类的结果,会增加代码阅读的难度。

(3)模板方法模式适合的场景
①多个子类有共有的方法,并且逻辑基本相同。
②重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现。
③重构时,模板方法是一个经常使用的方法,把相同的代码抽取到父类中,然后通过构造函数约束其行为。

原文链接:https://blog.youkuaiyun.com/u013393958/article/details/80231327

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值