设计模式之模板方法模式

本文介绍了一种设计模式——模板方法模式,通过在抽象类`AbstractSwordsman`中定义战斗流程,并让子类如`ZhangWuJi`和`ZhangSanFeng`重写部分步骤,实现算法的灵活性。它展示了如何在保持算法结构一致性的前提下,允许子类定制关键行为。
摘要由CSDN通过智能技术生成

定义一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类不改变一个算 法的结构即可重定义算法的某些特定步骤。

定义算法框架

public abstract class AbstractSwordsman {

    /**
     * /该方法为 final,防止算法框架被覆写
     */
    public final void fighting(){
        //运行内功,抽象方法
        neigong();
        //调整经脉,具体方法
        meridian();
        //如果有武器,则准备武器
        if(hasWeapons()) {//2
            weapons();
        }
        //使用招式
        moves();
        //钩子方法
        hook();//1
    }

    private void hook() {}
    protected abstract void moves();
    protected abstract void weapons();
    protected abstract void neigong();
    protected void meridian(){
        System.out.println("开启正经与奇经");
    }
    

    /**
     *  是否有武器,默认是有武器的,钩子方法
     * @return
     */
    private boolean hasWeapons() {
        return true;
    }
}

 具体实现类

public class ZhangWuJi extends AbstractSwordsman {
    @Override
    protected void moves() {
        System.out.println("使用招式乾坤大挪移");
    }

    @Override
    protected void weapons() {

    }

    @Override
    protected void neigong() {
        System.out.println("运行九阳神功");
    }

    @Override
    protected boolean hasWeapons() {
        return false;
    }
}
public class ZhangSanFeng extends AbstractSwordsman {
    @Override
    protected void moves() {
        System.out.println("使用招式神门十三剑");
    }

    @Override
    protected void weapons() {
        System.out.println("使用真武剑");
    }

    @Override
    protected void neigong() {
        System.out.println("运行纯阳无极功");
    }

    @Override
    protected void hook() {
        System.out.println("突然肚子不舒服,老夫先去趟厕所");
    }
}

客户端调用

public static void main(String[] args) {
        ZhangWuJi zhangWuJi=new ZhangWuJi();
        zhangWuJi.fighting();
        ZhangSanFeng zhangSanFeng=new ZhangSanFeng();
        zhangSanFeng.fighting();
    }

使用场景:

  1. 多个子类有共有的方法,并且逻辑基本相同时。
  2. 面对重要、复杂的算法,可以把核心算法设计为模板方法,周边相关细节功能则由 各个子类实现
  3. 需要通过子类来决定父类算法中的某个步骤是否执行,实现子类对父类的反向控制。

优点:

  1. 模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。
  2. 子类实现算法的某些细节,有助于算法的扩展。

缺点:每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值