设计模式-模板模式

模板模式是一种行为型设计模式,它允许子类在不改变整体结构的情况下重写算法的特定步骤。通过抽象父类定义执行步骤,子类实现细节操作。此模式提高了代码复用,遵循“开闭原则”。博客通过一个吃饭模板示例展示了模板模式的使用,包括抽象父类定义的吃饭流程(做饭、吃、洗碗)以及子类对做饭步骤的个性化实现。

设计模式-模板模式

定义: 一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
简单来说,一件事,又固定的步骤,抽象父类定义了他执行的步骤和每个步骤的的实现方法,而子类可以重写实现方法。

  • 优点:
    1.具体细节步骤实现定义在子类中,子类定义详细处理算法是不会改变算法整体结构。
    2.代码复用的基本技术,在数据库设计中尤为重要。
    3.存在一种反向的控制结构,通过一个父类调用其子类的操作,通过子类对父类进行扩展增加新的行为,符合“开闭原则”。
  • 不足:
    每个不同的实现都需要定义一个子类,会导致类的个数增加,系统更加庞大。

类图:
抽象父类吃饭方法: 烧饭 ——> 吃 ——> 洗碗;
不同人烧烧菜不同
在这里插入图片描述实例说明:

  • 抽象父类

public abstract class EatTemplate {

    /**
     * 吃饭:需要 做饭  吃  洗碗
     */
    protected void eat(){
        //做饭
        cook();
        // 吃
        meal();
        // 洗碗
        wash();
    }
    /*
     * 该方法就是一个钩子方法,通过子类的实现干预父类的方法的业务流程
     * 钩子方法挂载到父类方法中执行
     * 每个人做的菜不同
     * */
    public abstract void cook();

    public void meal() {
        System.out.println("开吃了!");
    }

    public void wash() {
        System.out.println("吃完饭,洗碗了!!!");
    }
}

  • 实现子类A
public class ParsonAEat extends EatTemplate {

    @Override
    public void cook() {
        System.out.println("A烧了一条鱼!!!");
    }
}
  • 实现子类B
public class ParsonBEat extends EatTemplate {

    @Override
    public void cook() {
        System.out.println("B烧了一碗红烧肉!!!");
    }
}
  • 测试类
public class TestTemplate {
    public static void main(String[] args) {
        EatTemplate a = new ParsonAEat();
        a.eat();
        System.out.println("==========================我是一条无情的分割线=====================================");
        EatTemplate b = new ParsonBEat();
        b.eat();
    }
}
  • 测试结果
    在这里插入图片描述
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_41007138

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值