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

本文通过一个购买宝马1系汽车的例子,阐述了模板方法设计模式的原理和使用。模板方法模式允许在抽象类中定义算法框架,将不变部分实现,而将变化部分留给子类去实现。在例子中,车辆的基础配置如外观、发动机和内饰是确定的,而颜色选择是不确定的,由客户根据需求定制。这种模式减少了代码重复,支持算法扩展,并遵循开放-封闭原则。然而,它也可能导致类的数量增多。
摘要由CSDN通过智能技术生成

概述:

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

实现该模式的关键步骤:

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

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

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

wail.gif

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

1 abstract classBuyCar{2 public voidbuy(){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 voidchooseColor();14 }

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

1 class Man extendsBuyCar{2 public voidchooseColor(){3 System.out.println("白色的");4 }5 }

测试类:

1 public classTemplateMethod{2 public static voidmain(String[] args){3 Man m = newMan();4 m.buy();5 }6 }

输出结果:

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

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值