【设计模式-模板模式】

模板模式是一种行为型设计模式,它允许在抽象类中定义操作执行的模板,子类可重写具体步骤,封装不变部分,扩展可变部分。文章通过创建一个Game抽象类和BasketballGame、FootballGame两个子类的示例,展示了模板模式的使用,其中抽象方法包括初始化、开始游戏和游戏结束,主方法在抽象类中定义并调用这些步骤。
摘要由CSDN通过智能技术生成

模板模式

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
白话:在一个抽象类中定义几个抽象方法,在定义一个主方法,主方法中调用抽象方法,外部继承该类,子类按需重写抽象方法,并调用主方法执行,即为模板模式

模板模式的优缺点

  • 优点:
    a. 封装不变部分,扩展可变部分。
    b. 提取公共代码,便于维护。
    c. 行为由父类控制,子类实现。
  • 缺点:
    a. 每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

实现

我们将创建一个定义操作的 Game 抽象类,其中,模板方法设置为 final,这样它就不会被重写。Cricket 和 Football 是扩展了 Game 的实体类,它们重写了抽象类的方法。

TemplatePatternDemo,我们的演示类使用 Game 来演示模板模式的用法。
在这里插入图片描述

模板代码

1. 创建模板抽象类,并将模板方法设置为final,以防子类重写

/**
 * 抽象模板类
 */
public abstract class Game {

    abstract void initialize();
    abstract void startPlay();
    abstract void playEnd();

    // 模板方法,设定为final,不可被重写
    public final void play() {
        // 初始化游戏
        initialize();
        // 开始玩游戏
        startPlay();
        // 玩游戏结束
        playEnd();
    }
}

2. 创建具体实现类,即扩展类

public class BasketballGame extends Game{
    
    @Override
    void initialize() {
        System.out.println("basketball game initialize success!");
    }

    @Override
    void startPlay() {
        System.out.println("start play basketball game");
    }

    @Override
    void playEnd() {
        System.out.println("basketball game end");
    }
}

public class FootballGame extends Game{

    @Override
    void initialize() {
        System.out.println("football game initialize success!");
    }

    @Override
    void startPlay() {
        System.out.println("start play football game");
    }

    @Override
    void playEnd() {
        System.out.println("football game end");
    }
}

3. 使用Game方法测试

public class TemplatePatternTest {

    public static void main(String[] args) {

        Game basketballGame = new BasketballGame();
        basketballGame.play();

        Game footballGame = new FootballGame();
        footballGame.play();
    }
}

// 输出
// basketball game initialize success!
// start play basketball game
// basketball game end
// football game initialize success!
// start play football game
// football game end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值