读设计模式之禅--模板方法模式

  • 定义:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
    在这里插入图片描述
/**
 * @auther hyh
 * 生产一个芭比娃娃机器人
 * @create 2021-08-10 20:06
 */
public abstract class Model {

    //启动 抽象模板中的基本方法尽量设计为protected类型,符合迪米特法则
    protected abstract void start();
    //唱歌
    protected abstract void sing();

    //跳舞
    protected abstract void dancing();
    //关闭
    protected abstract void end();

    // 芭比娃娃功能模型测试
    public void templateTest(){
        this.start();
        this.sing();
        this.dancing();
        this.end();
    }
}
/**
 * @auther hyh
 * @create 2021-08-10 20:15
 */
public class FemalModel extends Model{
    @Override
    protected void start() {
        System.out.println("女芭比娃娃启动");
    }

    @Override
    protected void sing() {
        System.out.println("女芭比娃娃唱歌");
    }

    @Override
    protected void dancing() {
        System.out.println("女芭比娃娃跳舞");
    }

    @Override
    protected void end() {
        System.out.println("女芭比娃娃关闭");
    }
}
/**
 * @auther hyh
 * @create 2021-08-10 20:13
 */
public class MaleModel extends Model{
    @Override
    protected void start() {
        System.out.println("男芭比娃娃启动");
    }

    @Override
    protected void sing() {
        System.out.println("男芭比娃娃唱歌");
    }

    @Override
    protected void dancing() {
        System.out.println("男芭比娃娃跳舞");
    }

    @Override
    protected void end() {
        System.out.println("男芭比娃娃关闭");
    }
}
// 我是调皮得小男孩
class penple1{
    public static void main(String[] args) {
        Model maleMode = new MaleModel();
        maleMode.templateTest();
        Model femalMode = new FemalModel();
        femalMode.templateTest();
    }
}
輸出:
男芭比娃娃启动
男芭比娃娃唱歌
男芭比娃娃跳舞
男芭比娃娃关闭
女芭比娃娃启动
女芭比娃娃唱歌
女芭比娃娃跳舞
女芭比娃娃关闭
  • 扩展:现在需要 女性娃娃跳舞 男性不跳舞 只需要加一个 判断男女性得方法即可
/**
 * @auther hyh
 * 生产一个芭比娃娃机器人
 * @create 2021-08-10 20:06
 */
public abstract class Model {

    //启动
    protected abstract void start();
    //唱歌
    protected abstract void sing();

    //跳舞
    protected abstract void dancing();
    //关闭
    protected abstract void end();
    // 是否跳舞 是女性就跳舞
    protected abstract boolean isFemal();

    // 芭比娃娃功能模型测试 添加 final 关键字,防止子类复写
    public final void templateTest(){
        this.start();
        this.sing();
        if(this.isFemal()){
            this.dancing();
        }
        this.end();
    }
}
/**
 * @auther hyh
 * @create 2021-08-10 20:15
 */
public class FemalModel extends Model{
    @Override
    protected void start() {
        System.out.println("女芭比娃娃启动");
    }

    @Override
    protected void sing() {
        System.out.println("女芭比娃娃唱歌");
    }

    @Override
    protected void dancing() {
        System.out.println("女芭比娃娃跳舞");
    }

    @Override
    protected void end() {
        System.out.println("女芭比娃娃关闭");
    }

    @Override
    protected boolean isFemal() {
        return true;
    }
}
/**
 * @auther hyh
 * @create 2021-08-10 20:13
 */
public class MaleModel extends Model{
    @Override
    protected void start() {
        System.out.println("男芭比娃娃启动");
    }

    @Override
    protected void sing() {
        System.out.println("男芭比娃娃唱歌");
    }

    @Override
    protected void dancing() {
        System.out.println("男芭比娃娃跳舞");
    }

    @Override
    protected void end() {
        System.out.println("男芭比娃娃关闭");
    }

    @Override
    protected boolean isFemal() {
        return false;
    }
}
// 我是调皮得小男孩
class penple1{
    public static void main(String[] args) {
        Model maleMode = new MaleModel();
        maleMode.templateTest();
        FemalModel femalMode = new FemalModel();
        femalMode.templateTest();
    }
}
输出:
男芭比娃娃启动
男芭比娃娃唱歌
男芭比娃娃关闭
女芭比娃娃启动
女芭比娃娃唱歌
女芭比娃娃跳舞
女芭比娃娃关闭
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值