设计模式-模板模式

背景

现在餐厅有两个服务员,一个人负责煮茶,一个人负责煮咖啡,步骤如下

煮茶:

1.把水烧开

2.倒入茶叶

3.加水

煮咖啡:

1.把水烧开

2.倒入咖啡

3.加水

 

不用设计模式的实现

package com.example.designMode.template;

public class Origin {
    public static class TeaPerson{
        public void makeTea() {
            boilWater();
            addTea();
            pourWater();
        }


        private void boilWater() {
            System.out.println("烧水");
        }

        private void addTea() {
            System.out.println("加入茶叶");
        }


        private void pourWater() {
            System.out.println("倒水");
        }
    }

    public static class CoffeePerson{

        public void makeCoffee() {
            boilWater();
            addCoffee();
            pourWater();
        }

        private void boilWater() {
            System.out.println("烧水");
        }


        private void addCoffee() {
            System.out.println("加入咖啡");
        }

        private void pourWater() {
            System.out.println("倒水");
        }
    }

    public static void main(String[] args) {
        TeaPerson teaPerson = new TeaPerson();
        CoffeePerson coffeePerson = new CoffeePerson();
        teaPerson.makeTea();
        System.out.println("===============================");
        coffeePerson.makeCoffee();
    }
}

 

缺点

从以上步骤中可以看出来,烧水和倒水两个步骤是两个服务员都要做的,没有必要都实现一次。

 

模板模式实现

package com.example.designMode.template;

public class TemplateMode {

    public class Person{}

    public interface MakeTemplate{
        void boilWater();
        void make();
        void pourWater();
    }

    public static abstract class MakeTemplateAbstract implements MakeTemplate{
        @Override
        public void boilWater() {
            System.out.println("烧水");
        }

        @Override
        public void pourWater() {
            System.out.println("倒水");
        }

        public void makeDrink() {
            boilWater();
            make();
            pourWater();
        }

    }

    public static class TeaPerson extends MakeTemplateAbstract{

        @Override
        public void make() {
            System.out.println("加入茶叶");
        }
    }

    public static class CoffeePerson extends MakeTemplateAbstract{

        @Override
        public void make() {
            System.out.println("加入咖啡");
        }
    }


    public static void main(String[] args) {
        TeaPerson teaPerson = new TeaPerson();
        CoffeePerson coffeePerson = new CoffeePerson();
        teaPerson.makeDrink();
        System.out.println("===============================");
        coffeePerson.makeDrink();
    }

}

优点

将烧水和倒水两个步骤抽离到接口和实现类中,具体是煮茶还是煮咖啡,只需要具体实现制作过程,如果以后新来一个服务员,负责煮奶茶,只需要继承模板,实现制作方法就可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值