设计模式-模板设计

本文通过代码示例介绍了模板方法设计模式的使用。在系统设计初期,由于业务细节未知,可以定义抽象类并提供部分已知业务的实现,而将不确定的部分设为抽象方法。子类继承抽象类并实现这些抽象方法,以适应不同业务需求。这种设计允许在不修改原有结构的情况下扩展功能,符合开闭原则。
摘要由CSDN通过智能技术生成

设计思路:

	针对系统设计前期,不可能知道每个业务的具体实现,但是总体是知道某些业务之间的逻辑。所以我们可以在抽象类里面定义好(抽象业务)的抽象方法,
利用继承的多态,让子类实现父类,继承抽象方法。

代码思路:

1. 抽象类
package com.github.noodzhan.pattern.template;
/**
 * @author noodzhan </br>
 * @date 2021/1/20 19:01 </br>
 * @description 模板设计</br>
 *
 * 总体思路: 业务知道某些大体的实现思路,但是具体的某些业务不清楚,设置为抽象方法,留给子类去实现。
 */
public abstract class AbstractDoSomething {

    /**
     * 已经确定好的业务实现
     */
    public void executeAllThing(){
        this.doNoKnowSomeThing();
        this.executeKnowSomeThing();
    }

    /**
     * 具体方法,已经知道要做的事情
     */
    public void executeKnowSomeThing(){
        System.out.println("做已经知道的事情");
    }

    /**
     * 抽象方法,由子类实现,比如不同的业务,需要不同的实现,一般do开头的方法都是钩子函数
     */
    public abstract void doNoKnowSomeThing();


    public static void main(String[] args) {
        //使用抽象类接收参数,多态
        AbstractDoSomething doNoKnowSomeThingOne = new DoNoKnowSomeThingOne();
        AbstractDoSomething doKnowSomeThingTwo = new DoKnowSomeThingTwo();
        //不同的业务有着不同的实现,但是具体逻辑没有变

        //业务一
        doNoKnowSomeThingOne.executeAllThing();
        //业务二
        doKnowSomeThingTwo.executeAllThing();
    }

}

2. 具体子类一
package com.github.noodzhan.pattern.template;

/**
 * @author noodzhan </br>
 * @date 2021/1/20 19:06 </br>
 * @description </br>
 */
public class DoNoKnowSomeThingOne extends AbstractDoSomething{

    @Override
    public void doNoKnowSomeThing() {
        System.out.println("业务一:需要这么做开始不知道的方法");
    }
}

3. 具体子类二
package com.github.noodzhan.pattern.template;

/**
 * @author noodzhan </br>
 * @date 2021/1/20 19:07 </br>
 * @description </br>
 */
public class DoKnowSomeThingTwo extends AbstractDoSomething{
    @Override
    public void doNoKnowSomeThing() {
        System.out.println("业务二:需要这么做开始不知道的方法");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值