- 前言
- 一、定义和区别
- 二、具体构造
- 2.1 策略(方法)模式
- 2.2 模板(方法)模式
- 2.3 Java库中的具体应用
- 三、总结评价
- 设计模式系列文章
- 结尾
前言
设计模式是进行实际开发的基石,是前人不断总结试错得出的宝贵开发经验,也是开发人员之间相互理解共同设计的关键标准。学习设计模式能够帮助我们初学者更好理解结构化的开发流程,摆脱只会写一段代码而不能上升为一个项目的不上不下的尴尬处境
一、定义和区别作者更有一系列设计模式文章(还在持续更新),图例丰富,少量代码,适合入门,系列文章见末尾跳转
策略(方法)模式:定义一系列解决类似问题的不同方法,包装成策略类,提供统一接口可以供取用者自行更改选择。
- 比如一个比较器:Comparator,你可以自己定义比较策略,从大到小or从小到大,还是按字典序等,都是为了解决“比较”这一问题的不同策略。
模板方法模式:定义了一套做一个任务的通用流程,并给出了部分不变的工作步骤的实现。
- 比如要实现一个加密模板:读取文件和保存文件都是一模一样的,只需要修改其中的加密过程采用不同的加密方法即可,于是预先写好读取,保存步骤,继承的子类在自己实现加密步骤。
二者的区别在于:一个聚焦于解决问题的多种方法,一个聚焦于解决问题的固定步骤。
- 若问题较小,一步到位/没有固定步骤——策略(方法)模式;
- 若问题由多步组合而成,又有固定不变的过程——模板方法模式
通过统一的接口类Startegy——约定了实现该接口的类都能提供dealPromblem方法解决问题,而且具体策略之间不会相互影响,可以自由添加和修改以指定不同策略。
- 倘若直接将策略写入使用者中,更改策略会很麻烦,而且使用者的方法会过于臃肿复杂。这样将策略(方法)独立为一个类有效切分了功能,还使得代码易于维护。
通过两张图的对比,大体都是统一了一个父类/接口,但是模板方法类中步骤更多,包含有不需要子类继承实现的固定步骤。
- 模板方法提供了工作流程模板,子类只需要对其进行填充即可,保证了流程更可靠,而且模板方法有很高的复用性(想想PPT模板,论文模板是不是减少了你的前期工作,而且使用范围很广)。
相信大家对Arrays.sort()这个排序方法都不陌生,但是对其原理和高级应用大家是否清楚呢?
- Arrays.sort()方法能够对所有数组进行排序,他提供一系列排序步骤,而同时允许其自定义比较规则。这里Arrays.sort()本身不需要继承扩展,而是直接将比较器Comparator(这里又是一种策略方法的实例),作为参数传入Arrays.sort()方法中,相当于自定义了排序过程中的比较步骤。
这里我引用了该博客的例子——Comparator详解
package cn.comparator.A; import java.util.Comparator; public class ComparatorLength implements Comparator{ @Override public int compare(String o1, String o2) { int len1 = o1.length(); int len2 = o2.length(); return (len1 - len2 > 0) ? 1 : -1; } }
@Test public void test2(){ String[] str = {"aadsaf","dqwd","dqwfcsqc","xqsccaac","csfwffqaf","czxca","cas","cacs","casc"}; Comparator com1 = new ComparatorLength(); Comparator com2 = new ComparatorLength(); Arrays.sort(str, com1); System.out.println(Arrays.toString(str)); Arrays.sort(str, com2); System.out.println(Arrays.toString(str)); System.out.println((com1 == com2) +"--"+ (com1.equals(com2))); }
比较结果
二者都是较为简单的设计模式。
优点:
- 都能提高代码的重用,使得代码易于维护(策略模式将各种策略独立,不会相互影响,不给使用者添麻烦;而模板方法模式提供主体模板,使得子类DIY有流程可依,且实现了固定步骤)
- 模板方法主要在于——提取了公共方法实现,而由子类实现细节处理
- 策略模式——一个接口自由切换策略,使得策略和策略使用者解耦
缺点:
- 都大大增加了类的种类,使得系统更加复杂
一、创建型模式——工厂模式
二、创建型模式——单例模式、原型模式
三、创建型模式——建造者模式
四、结构型模式——装饰者模式
五、结构型模式——代理、适配器模式
六、结构型模式——外观模式
七、结构型模式——三合一(组合模式、桥接模式、享元模式)
八、行为型模式——观察者模式
九、行为型模式——迭代器模式
十、行为型模式——模板方法、策略方法模式
结尾
作者长期更新,如果觉得本文还算不错的话,请给我一个大大的赞!!!
如果非常赞同这篇文章,请关注我,持续了解更多精彩博文!!!
作者主攻Java Web方向,平时长期更新Java Web基础概念文章,以及算法和数据结构——【一日双题—见微知著】系列。同时设计模式系列也会尽快一月内完结
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)