模板模式(重在理解模式,代码简单)

意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中

主要解决的问题:一些方法通用,却在每一个子类中都重写了这一方法(抽象类类似)

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

***由子类实现这些抽象方法

定义模板类

package com.cy;
/*
表示游戏对应的模板类(方法由具体的子类来完成)
所以此类定义为抽象类
 */
public abstract class Game {
    //游戏初始化
    public abstract void initialize();
    //开始游戏
    public abstract void startPlay();
    //结束游戏
    public abstract void endPlay();
    //这三个步骤应统一起来?定义一个游戏的操作方法
    public void play(){
        initialize();
        startPlay();
        endPlay();
    }
}

Game1

package com.cy;
/*
板球运动
 */
public class Cricket extends Game{

    @Override
    public void initialize() {
        System.out.println("板球游戏开始初始化");
    }

    @Override
    public void startPlay() {
        System.out.println("板球游戏正在进行中");
    }

    @Override
    public void endPlay() {
        System.out.println("板球游戏结束");
    }
}

Game2

package com.cy;

public class FootBall extends Game{
    @Override
    public void initialize() {
        System.out.println("足球游戏开始初始化");
    }

    @Override
    public void startPlay() {
        System.out.println("足球游戏正在进行中");
    }

    @Override
    public void endPlay() {
        System.out.println("足球游戏结束");
    }
}

创建客户端

package com.cy;

public class TemplatePatternDemo {
    public static void main(String[] args) {
        Game game=new FootBall();
        game.play();
        Game game1=new Cricket();
        game1.play();
    }
}

破坏模式:play方法可以被子类重写,所以可以用final关键字修饰play方法,是设计上的一个提升缺点:football类如果还想实现其他父类,扩展将会违背单继承

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值