设计模式-模板方法(十三)

简介

定义一个操作中的算法骨架即方法链,定义一些模板方法,将核心方法留给子类实现,子类在完成方法链的时候,可以调用模板方法,也可以覆写模板方法,执行业务的时候就会在自己的方法和模板方法中切换

例子

洗衣服接口

public interface Wash {

    //执行洗衣服
    void execute();
}

模板方法类

public abstract class AbstractWash implements Wash {

    //使用protected的,子类可以进行调用覆写,外部不能调用
    protected void before() {
        System.out.println("拿出洗衣机,插上电源。。。。");
    }
    protected void after() {
        System.out.println("拔掉电源,收拾好洗衣机。。。。");
    }

    //具体的抽象方法子类进行实现
    public abstract void doWash();

    @Override
    public final void execute() {
        //方法链子,使用多态进行方法选择
        this.before();
        this.doWash();
        this.after();
    }
}

自动洗衣机实现类

//全自动洗衣机
public class Automatic extends AbstractWash {
    @Override
    public void doWash() {
        System.out.println("使用全自动洗衣机。。。。");
    }
}

普通洗衣机实现类

//普通洗衣机
public class Matic extends AbstractWash {
    @Override
    public void doWash() {
        System.out.println("使用普通洗衣机。。。。");
    }
}

手洗实现类

//我自己手洗
public class MyMatic extends AbstractWash {
    //核心方法必须进行覆写
    @Override
    public void doWash() {
        System.out.println("使用手洗。。。。。");
    }

    //这里也可以只覆写一个方法,根据实际需要进行覆写
    //使用我自己的before方法,不使用模板方法
    @Override
    protected void before() {
        System.out.println("拿出洗衣板。。。。");
    }

    //使用我自己的after方法,不使用模板方法
    @Override
    protected void after() {
        System.out.println("洗完以后发个朋友圈。。。");
    }
}

测试

public class Main {
    public static void main(String[] args) {
        Wash automatic = new Automatic();
        automatic.execute();
//        拿出洗衣机,插上电源。。。。
//        使用全自动洗衣机。。。。
//        拔掉电源,收拾好洗衣机。。。。
        Wash matic = new Matic();
        matic.execute();
//        拿出洗衣机,插上电源。。。。
//        使用普通洗衣机。。。。
//        拔掉电源,收拾好洗衣机。。。。
        Wash myMatic = new MyMatic();
        myMatic.execute();
//        拿出洗衣板。。。。
//        使用手洗。。。。。
//        洗完以后发个朋友圈。。。

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值