设计模式-模块方法模式

前言

本文来自《Head Fist 设计模式》一书的实例,这里仅仅是个人笔记记录

简介

模块方法模式,个人理解,首先模块方法需要有final,即该方法里面执行顺序不可改变,但是模块方法里面的字方法允许执行abstract方法。即abstact方法可以根据不同情况改变。

需求

用模块方法模式写一个泡茶和泡咖啡的例子

开发

需求分析

    /**
     * 制作一份饮料的流程顺序是
     * 1.boilWater
     * 2.addBeverage
     * 3.pourInCup
     * 4.addCondiments
     * <p/>
     * 其中addBeverage和addCondiments未抽象方法的原因:
     * 不同饮料的这个两个方法是不一样的,故抽象化,并由对应之类实现
     * <p/>
     * 上述的特点就是模块方法的特点,即保持模块方法流程顺序,个别子方法按需重写实现
     */
    public final void prepareRecipe() {
        boilWater();
        addBeverage();
        pourInCup();
        addCondiments();
    }

模块方法的基类或超类

package TemplateMethodPattern;

public abstract class MakeDrink {

    /**
     * 制作一份饮料的流程顺序是
     * 1.boilWater
     * 2.addBeverage
     * 3.pourInCup
     * 4.addCondiments
     * <p/>
     * 其中addBeverage和addCondiments未抽象方法的原因:
     * 不同饮料的这个两个方法是不一样的,故抽象化,并由对应之类实现
     * <p/>
     * 上述的特点就是模块方法的特点,即保持模块方法流程顺序,个别子方法按需重写实现
     */
    public final void prepareRecipe() {
        boilWater();
        addBeverage();
        pourInCup();
        addCondiments();
    }

    /**
     * 烧水
     */
    private void boilWater() {
        System.out.print("boilWater");
    }

    /**
     * 加入饮料的主料
     */
    protected abstract void addBeverage();

    /**
     * 倒入杯子
     */
    private void pourInCup() {
    }

    /**
     * 加入辅料
     */
    protected abstract void addCondiments();

}

泡咖啡

package TemplateMethodPattern;

public class MakeCoffeeDrink extends MakeDrink {

    @Override
    protected void addBeverage() {
        System.out.print("coffee");
    }

    @Override
    protected void addCondiments() {
        System.out.print("sugar and milk");
    }
}

泡茶

package TemplateMethodPattern;

/**
 * Created by Fadi.Su on 2017/11/25.
 */
public class MakeTeaDrink extends MakeDrink {

    @Override
    protected void addBeverage() {
        System.out.print("Tea");
    }

    @Override
    protected void addCondiments() {
        System.out.print("Lemon");
    }
}

结语

看设计模式的书,感觉很多情况下,还不如看代码理解快些,代码语言其实是国际通用的,很多情况下书本上的语言只是辅助理解。目前主要接触下这个需求场景及其所用到的设计模式。到时候根据对应的场景模块,适当地套用设计模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

法迪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值