模板模式

模板模式

定义:

模板模式是行为型模式的一种。它的定义是一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。

优点

  • 封装不变部分,扩展可变部分。
  • 提取公共代码,便于维护。
  • 行为由父类控制,子类实现。

缺点

每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

使用场景
- 有多个子类共有的方法,且逻辑相同。
- 重要的、复杂的方法,可以考虑作为模板方法。

为防止恶意操作,一般模板方法都加上 final 关键词


实例

定义一个Role类,采取西游记中悟空和六耳猕猴的经历来介绍 模板模式。

  • Role
public abstract class Role {

    /**
     * 起步阶段
     */
    protected abstract void onStart();

    /**
     * 成长阶段
     */
    protected abstract void onGrow();

    /**
     * 巅峰阶段
     */
    protected abstract void onPeak();

    /**
     * 结束阶段
     */
    protected abstract void onEnd();

    /**
     * 一生
     */
    public final void allLife() {//为防止恶意操作,一般模板方法都加上 final 关键词
        onStart();
        onGrow();
        onPeak();
        onEnd();
    }

}
  • WuKong
public class WuKong extends Role {
    @Override
    protected void onStart() {
        System.out.println("拜师学艺");
    }

    @Override
    protected void onGrow() {
        System.out.println("大闹天宫");
    }

    @Override
    protected void onPeak() {
        System.out.println("西天取经");
    }

    @Override
    protected void onEnd() {
        System.out.println("斗战圣佛");
    }
}
  • SixEarMonkey
public class SixEarMonkey extends WuKong {

    @Override
    protected void onPeak() {
        System.out.println("六耳猕猴取代悟空西天取经");
    }

}
  • main方法中实现
public class MyClass {

    public static void main(String[] args) {

        Role role = new WuKong();

        role.allLife();

        System.out.println("--------------");

        role = new SixEarMonkey();

        role.allLife();

    }
}

打印结果:

拜师学艺
大闹天宫
西天取经
斗战圣佛
--------------
拜师学艺
大闹天宫
六耳猕猴取代悟空西天取经
斗战圣佛
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值