设计模式(十五)

栏目: 后端 · 发布时间: 5年前

内容简介:在生活中有些事情的流程是一致的,只是其中的某些步骤不一致,这就是一个模板,比如银行办理业务.进门取号 ----> 填写单据 ----> 等待叫好 ----> 窗口办理填写单据这一步骤就是不同的地方.

什么是模板方法模式

在生活中有些事情的流程是一致的,只是其中的某些步骤不一致,这就是一个模板,比如银行办理业务.

进门取号 ----> 填写单据 ----> 等待叫好 ----> 窗口办理

填写单据这一步骤就是不同的地方.

项目中的模板方法模式:一个抽象类中,有一个主方法,在定义多个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,不同子类的重写内容可以不同,通过调用抽象类,实现对子类的调用.

如何实现模板方法模式

例子:

泡咖啡:把水煮沸 --> 沸水冲泡咖啡 --> 咖啡倒进杯子 --> 加糖加奶

泡茶:把水煮沸 --> 沸水浸泡茶叶 --> 茶倒进杯子 --> 加柠檬

分析:冲泡和浸泡都是泡,加糖加奶加柠檬都是加料

创建一个抽象类,在里面定义模版方法和其他的方法

public abstract class BubbleBeverage {

//定义模版方法,注意需要final修饰,不允许外界修改模版框架

public final void beverageTemplate(){

//1.煮沸水

boilWater();

//2.泡制

brew();

//3.倒入杯子

pourInCup();

//4.加料

addSomething();

}
//需要在子类中实现的方法

protected abstract void addSomething();

private void pourInCup() {

System.out.println("将饮料倒入杯子中");

}

 

//需要在子类中实现的方法

protected abstract void brew();

private void boilWater() {

System.out.println("将水煮沸");

}

}

 

模版类的子类

子类A:

//定义一个子类实现茶的泡制

public class TeaBeverage extends BubbleBeverage{

@Override

protected void addSomething() {

System.out.println("加柠檬");

}

@Override

protected void brew() {

System.out.println("用沸水浸泡茶叶");

}

 

子类B:

import cn.wxdl.abstracts.BubbleBeverage;

//定义一个子类实现咖啡的制备

public class CoffeeBeverage extends BubbleBeverage{

@Override

protected void addSomething() {

System.out.println("加糖加奶");

}

@Override

protected void brew() {

System.out.println("用沸水冲泡咖啡");

}

}

 

测试类:

public class TestDemo {

public static void main(String[] args) {

testCoffee();

System.out.println("-------------------------");

testTea();

}

public static void testCoffee(){

BubbleBeverage beverage = new CoffeeBeverage();

System.out.println("开始制备咖啡");

beverage.beverageTemplate();

System.out.println("咖啡制备完成");

}

public static void testTea(){

BubbleBeverage beverage = new TeaBeverage();

System.out.println("开始泡制茶");

beverage.beverageTemplate();

System.out.println("茶泡制完成");

}

}
复制代码

模板方法模式的特点

算法或操作遵循相似的逻辑

重构时(将相同的代码抽取到父类中)

重要,复杂的算法,核心算法设计为模版算法

优点:

1.封装性好

2.复用性好

3.屏蔽细节

4.便于维护

总结

模版方法模式的实现要素:抽象基类和具体子类

抽象基类中有共性的方法(已实现)和抽象方法(只知道原则不知道细节),还有模版方法

note:交人交心,浇花浇根。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

从问题到程序

从问题到程序

裘宗燕 / 机械工业出版社 / 2011-5 / 39.00元

《从问题到程序:程序设计与C语言引论(第2版)》以C作为工具语言,讨论了基本程序设计的各方面内容,详细解释了与c语言和程序设计有关的问题。在新版中,特别加强了针对近年日益受到业界和学术界广泛重视的问题的讨论,并通过详细地分析和讨论大量符合C99标准的实例,给出了分析和分解问题、找出解决问题的主要步骤、确定函数抽象、找出循环、选择语言结构直至最后做出所需程序的完整过程。 《从问题到程序:程序设......一起来看看 《从问题到程序》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换