设计模式——行为型模式之策略(方法)、模板方法模式(能够帮助你设计高重用的方法的设计模式,面向对象里如何实现面向过程设计?)

设计模式是开发基石,策略模式提供统一接口,用于解决不同问题的方法,如Comparator实现不同比较策略。模板方法模式定义通用流程,提供部分实现,子类实现特定步骤,如加密模板。两模式提高代码重用,简化维护,但也增加系统复杂性。适用于Java Web开发和算法学习。
摘要由CSDN通过智能技术生成


前言

设计模式是进行实际开发的基石,是前人不断总结试错得出的宝贵开发经验,也是开发人员之间相互理解共同设计的关键标准。学习设计模式能够帮助我们初学者更好理解结构化的开发流程,摆脱只会写一段代码而不能上升为一个项目的不上不下的尴尬处境

作者更有一系列设计模式文章(还在持续更新),图例丰富,少量代码,适合入门,系列文章见末尾跳转

一、定义和区别

策略(方法)模式:定义一系列解决类似问题的不同方法,包装成策略类,提供统一接口可以供取用者自行更改选择。

  • 比如一个比较器:Comparator,你可以自己定义比较策略,从大到小or从小到大,还是按字典序等,都是为了解决“比较”这一问题的不同策略。

模板方法模式:定义了一套做一个任务的通用流程,并给出了部分不变的工作步骤的实现。

  • 比如要实现一个加密模板:读取文件和保存文件都是一模一样的,只需要修改其中的加密过程采用不同的加密方法即可,于是预先写好读取,保存步骤,继承的子类在自己实现加密步骤。

二者的区别在于:一个聚焦于解决问题的多种方法,一个聚焦于解决问题的固定步骤。

  • 若问题较小,一步到位/没有固定步骤——策略(方法)模式;
  • 若问题由多步组合而成,又有固定不变的过程——模板方法模式

二、具体构造

2.1 策略(方法)模式

在这里插入图片描述
通过统一的接口类Startegy——约定了实现该接口的类都能提供dealPromblem方法解决问题,而且具体策略之间不会相互影响,可以自由添加和修改以指定不同策略。

  • 倘若直接将策略写入使用者中,更改策略会很麻烦,而且使用者的方法会过于臃肿复杂。这样将策略(方法)独立为一个类有效切分了功能,还使得代码易于维护。

2.2 模板(方法)模式

在这里插入图片描述通过两张图的对比,大体都是统一了一个父类/接口,但是模板方法类中步骤更多,包含有不需要子类继承实现的固定步骤。

  • 模板方法提供了工作流程模板,子类只需要对其进行填充即可,保证了流程更可靠,而且模板方法有很高的复用性(想想PPT模板,论文模板是不是减少了你的前期工作,而且使用范围很广)。

2.3 Java库中的具体应用

相信大家对Arrays.sort()这个排序方法都不陌生,但是对其原理和高级应用大家是否清楚呢?

  • Arrays.sort()方法能够对所有数组进行排序,他提供一系列排序步骤,而同时允许其自定义比较规则。这里Arrays.sort()本身不需要继承扩展,而是直接将比较器Comparator(这里又是一种策略方法的实例),作为参数传入Arrays.sort()方法中,相当于自定义了排序过程中的比较步骤。

这里我引用了该博客的例子——Comparator详解

package cn.comparator
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

代码之狐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值