设计模式----模板模式

模板方法设计模式是一种设计模式,它定义了操作中的算法骨架,而将一些步骤延迟到子类中。通过这种方式,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些特定步骤。例如,在游戏中,人物的技能和连招可以使用这种模式实现。模板方法模式常用于代码的结构统一,如Spring对Hibernate的支持,确保基础流程一致,允许子类定制具体步骤。在代码中,抽象类定义了游戏的play方法,包含初始化、开始和结束游戏的步骤,子类则实现具体的初始化、开始和结束方法,实现游戏个性化。

模板方法设计模式

什么是模板方法设计模式

用通俗的话来说:

在一个游戏中一个人物有多个技能,A技能 回血,B技能 增强其他技能 C技能 通过消耗自己的一定血量来获得更强的属性加强。

那我们创建一个抽象类 把这个人物的所有技能都放在抽象类里面 不同的子类实现出来的技能都不一样(但根本上还是那个作用,比如回血的技能:不管怎么重写 都是回血,可能有的是 先消耗自己现有的30%的血然后回复70%的血,而有的就是直接回复30%的血)

在抽象类中 根据技能创建一个连招,比如:

连招1:C -》A-》 B(消耗自己的血 增强属性 然后回血,再增强回血技能)

连招2:C->B->A(增强属性 并且加强,然后回血)

这些连招都是写在抽象类中 并且使用 final修饰 让实现类不可以重写 因为我已经把连招给定好了 他们只需要使用就行 虽然不可以修改连招 但可以修改技能

模板方法设计模式是做什么的

1、在造房子的时候,地基、走线、水管都一样,只有在建筑的后期才有加壁橱加栅栏等差异。

2、西游记里面菩萨定好的 81 难,这就是一个顶层的逻辑骨架。

3、spring 中对 Hibernate 的支持,将一些已经定好的方法封装起来,比如开启事务、获取 Session、关闭 Session 等,程序员不重复写那些已经规范好的代码,直接丢一个实体就可以保存。

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

模板方法设计模式的应用场景

1、有多个子类共有的方法,且逻辑相同。

2、重要的、复杂的方法,可以考虑作为模板方法。

使用模板方法设计模式的好处

1、封装不变部分,扩展可变部分。

2、提取公共代码,便于维护。

3、行为由父类控制,子类实现。

代码

抽象类

public abstract class Game {

    abstract void initialize();
    abstract void startPlay();
    abstract void endPlay();

    //模板
    public final void play(){

        //初始化游戏
        initialize();

        //开始游戏
        startPlay();

        //结束游戏
        endPlay();
    }

}

实现类

user_01

public class User_01 extends Game{
    //初始化
    void initialize() {
        System.out.println("初始化游戏");
    }
    //开始游戏
    void startPlay() {
        System.out.println("开始游戏");
    }
    //结束游戏
    void endPlay() {
        System.out.println("结束游戏");
    }
}

user_02

public class User_02 extends Game{
    //初始化
    void initialize() {
        System.out.println("添加脚本,增强人物属性");
        System.out.println("初始化游戏");
    }
    //开始游戏
    void startPlay() {
        System.out.println("开始游戏");
    }
    //结束游戏
    void endPlay() {
        System.out.println("关闭脚本");
        System.out.println("关闭游戏");
    }

}

测试类

public class Demo {
    public static void main(String[] args) {
        Game game = new User_01();
        game.play();
        System.out.println("---------------------");
        game = new User_02();
        game.play();

    }
}
//测试结果
初始化游戏
开始游戏
结束游戏
---------------------
添加脚本,增强人物属性
初始化游戏
开始游戏
关闭脚本
关闭游戏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值