JAVA模板方法设计模式(从现实生活角度理解代码原理)

概述:

定义一个功能的框架(骨架),一部分功能是确定的,一部分功能是不确定的,先把确定的部分实现,把不确定的部分延迟到子类中实现。

实现该模式的关键步骤:

第一步:抽象类,实现模板方法,定义功能(确定的以及不确定的)的框架。

第二步:具体类,实现抽象类中的抽象方法,已完成完整的功能。

老规矩,最近想整一台BMW1系,去了趟4S店,店里恰好有一台现车,但颜色我不太喜欢,这时服务顾问上来解释说:“先生,您看中的这台车就这一个型号,外观,发动机,内饰等配置都是一样的,但颜色是可以个性化定制的,所以这个您不用担心”。这里大家该明白了,这就是一个典型的模板方法了,确定的功能是发动机,外观,内饰等,不确定的就是颜色了。那我们就开始代码实现了,毕竟作为程序员,只有敲好了代码才买得起宝马啊

第一步:抽象类,定义功能框架

 1 abstract class BuyCar{
 2     public void buy(){
 3         //确定的功能
 4         System.out.println("欢迎来到宝马4S店,我给你介绍下你选的这款车");
 5         System.out.println("外观:两厢,家族式双肾栅格,典型的宝马脸");
 6         System.out.println("发动机:2.0L双涡管单涡轮增压发动机");
 7         System.out.println("内饰:。。。。。。。。");
 8         System.out.println("这款车整体请看就是这样,但颜色可以选择,你想要白色还是红色呢?");
 9         //不确定的功能选项
10         chooseColor();
11     }
12     //对不确定功能定义抽象方法供具体类实现
13     public abstract void  chooseColor();
14 }

第二步:具体类,实现抽象方法

1 class Man extends BuyCar{
2     public  void  chooseColor(){
3         System.out.println("白色的");
4     }
5 }

测试类:

1 public class TemplateMethod{
2     public static void main(String[] args){
3         Man m = new Man();
4         m.buy();
5     }
6 }

输出结果:

1 欢迎来到宝马4S店,我给你介绍下你选的这款车
2 外观:两厢,家族式双肾栅格,典型的宝马脸
3 发动机:2.0L双涡管单涡轮增压发动机
4 内饰:。。。。。。。。
5 这款车整体请看就是这样,但颜色可以选择,你想要白色还是红色呢?
6 白色的

就这样,我的购车之旅就结束了。也对模板方法有了新的感悟:

该模式有他的优点,比如说:

(1)模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。

(2)子类实现算法的某些细节,有助于算法的扩展。

(3)通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。

但是缺点也同样明显:每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。

时间: 2024-10-01 00:46:16

JAVA模板方法设计模式(从现实生活角度理解代码原理)的相关文章

JAVA装饰者模式(从现实生活角度理解代码原理)

装饰者模式可以动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 该模式的适用环境为: (1)在不影响其他对象的情况下,以动态.透明的方式给单个对象添加职责. (2)处理那些可以撤消的职责. (3)当不能采用生成子类的方法进行扩充时.一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长.另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类. 实现该模式的关键步骤: (1)Component(被装饰对象基类

Java抽象类深入理解-----模板方法设计模式(Templete Method)

模板方法设计模式(Templete Method) 定义一个操作中的算法骨架,而将一些可变部分的实现延迟到子类中. 模板方法设计模式使得子类可以不改变一个算法的结构即可重新定义该算法某些特定的步骤. 1 import java.util.Random; 2 3 public class AbstractTest002 { 4 public static void main(String[] args) { 5 JudgeMent jm = new JudgeMent(); 6 jm.action

Java演示设计模式中的单件模式的代码

下边代码内容是关于Java演示设计模式中的单件模式的代码,应该是对小伙伴们有所用处. public class SimpleSingleton { private static SimpleSingleton singleInstance = new SimpleSingleton(); private SimpleSingleton() { } public static SimpleSingleton getInstance() { return singleInstance; } } 调用

二、Java面向对象(15)_模板方法设计模式

2018-05-06 模板方法设计模式 在父类的一个方法中定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,因为不同子类的实现细节不同.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 抽象父类:定义操作中的业务骨架,而将这些步骤延迟到子类中. 抽象父类至少提供两种方法: 1)模板方法:一种通用的处理方式,即模板(总体算法的骨架). 2)抽象方法:一个具体的业务功能实现,由子类完成. 参考:https://www.cnblogs.com/liaoweipeng/p/5

(转)Java经典设计模式(3):十一种行为型模式(附实例和详解)

原文出处: 小宝鸽 Java经典设计模式共有21中,分为三大类:创建型模式(5种).结构型模式(7种)和行为型模式(11种). 本文主要讲行为型模式,创建型模式和结构型模式可以看博主的另外两篇文章:Java经典设计模式之五大创建型模式(附实例和详解).Java经典设计模式之七大结构型模式(附实例和详解). 行为型模式细分为如下11种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 接下来对11种行为型模式逐个进行介

Java大话设计模式

设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

java/android 设计模式学习笔记(7)---装饰者模式

这篇将会介绍装饰者模式(Decorator Pattern),装饰者模式也称为包装模式(Wrapper Pattern),结构型模式之一,其使用一种对客户端透明的方式来动态的扩展对象的功能,同时它也是继承关系的一种替代方案之一,但比继承更加灵活.在现实生活中也可以看到很多装饰者模式的例子,或者可以大胆的说装饰者模式无处不在,就拿一件东西来说,可以给它披上无数层不一样的外壳,但是这件东西还是这件东西,外壳不过是用来扩展这个东西的功能而已,这就是装饰者模式,装饰者的这个角色也许各不相同但是被装饰的对

设计模式奠基石——UML转化为代码

1.继承关系(泛化关系) [说明]:继承关系是子类(派生类)继承父类(基类),或者子接口继承父接口的关系.即子类对象"is a" 父类对象,比如鸟是动物. [UML图]: 图解:Animal为父类,Bird类.Fish类.Dog类分别继承了Animal类,它们不仅继承了Animal的公用方法Breath(),同时也根据自己的实际需要拓展了相关方法(Fly()方法.Swim()方法.Run()方法). [对应代码]: //Animal类(父类): class Animal { publi

第8篇-JAVA面向对象-设计模式Ⅳ

第8篇-JAVA面向对象-设计模式Ⅳ 每篇一句 : 想象是程序的创作之源 初学心得 : 平静的海洋练不出熟练的水手 (笔者:JEEP/711)[JAVA笔记 | 时间:2017-04-11| JAVA面向对象 Ⅳ] JAVA设计模式 什么是JAVA设计模式以及作用? 设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结 使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性,本篇将介绍10种JAVA常用设计模式 1.JAVA 设计模式 - 单例设计模式 单例模