Java模板设计模式与接口

目录

一、星巴克咖啡冲泡法

二、星巴克茶冲泡法

三、模板设计模式 

超类实现

子类实现

测试类 

 四、接口

接口使用原则

接口的应用场景

1.定义规范/标准

2.表示一种能力/行为

PS:本章节所有源代码:

主要是接口表示一种能力和行为的例子源代码

模式结构设计以及接口表示定义及规范


开闭原则(OCP): 一个软件实体如类、模块和函数应该对扩展开放、对修改关闭。

开闭原则是Java世界中最基础的设计原则。

模版设计模式是抽象类的一个实际应用场景,讲模板设计模式之前,我们先来看一下星巴克咖啡冲泡师傅的训练手册。

一、星巴克咖啡冲泡法

1. 将水煮沸 2. 用沸水冲泡咖啡 3. 将咖啡倒进杯子 4. 加糖和牛奶

范例:冲泡咖啡类

    //一键启动按钮,点这个按钮就可以做出一杯咖啡
    public void prepareRecipe(){
        boilWater();//烧水
        brewCoffeeBag();//把咖啡泡在水中
        pourInCup();//把咖啡倒在顾客杯子里
        addSugarAndMilk();//添加糖和牛奶
    }

    private void addSugarAndMilk() {
        System.out.println("adding sugar and milk");
    }

    private void pourInCup() {
        System.out.println("pouring coffee into cup");
    }

    private void brewCoffeeBag() {
        System.out.println("brewing coffee bag");
    }

    private void boilWater() {
        System.out.println("boiling water");
    }
}

二、星巴克茶冲泡法

1. 将水煮沸    2. 用沸水浸泡茶叶      3. 把茶倒进杯子       4. 加柠檬

范例:冲泡茶类

    public void prepareRecipe(){
        boilWater();//烧水
        steepTeaBag();//将茶包泡在水里
        pourInCup();//将泡好的茶倒入顾客杯子
        addLemon();//加柠檬
    }

    private void addLemon() {
        System.out.println("adding lemon into tea");
    }

    private void pourInCup() {
        System.out.println("pouring tea into cup");
    }

    private void steepTeaBag() {
        System.out.println("steeping tea bag");
    }

    private void boilWater() {
        System.out.println("boiling water...");
    }
}

三、模板设计模式 

我们在这两个类中发现了重复代码,因此我们需要重新理一下我们的设计。 既然茶和咖啡是如此的相似,因此我们应该将共同的部分抽取出来,放进一个基类中。

实际上,浸泡(steep)和冲泡(brew)差异并不大。因此我们给它一个新的方法名称brew(),这样我们无论冲泡 的是何种饮料都可以使用这个方法。同样的,加糖、牛奶还是柠檬也很相似,都是在饮料中加入其它调 料,因此我们也给它一个通用名称addCondiments()。重新设计后通用的prepareRecipe()方法如下:

void prepareRecipe() {
    boilWater();
    brew();
    pourInCup();
    addCondiments();
}

下面我们来分别实现超类(引入"钩子"方法)与子类。

超类实现

public abstra
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王嘻嘻-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值