Java设计模式精讲—课程笔记8(第18章 迭代器模式 + 第19章 策略模式 + 第20章 解释器模式)
Java设计模式精讲—课程笔记8
18 迭代器模式讲解+源码解析
18.1 迭代器模式讲解
- 定义:提供一种方法,顺序访问一个集合对象中的各个元素,而又不暴露该对象的内部表示;
类型:行为型; - 适用场景:
访问一个集合对象的内容而无需暴露它的内部表示;
为遍历不同的集合结构提供一个统一的接口; - 优点:
分离了集合对象的遍历行为; - 缺点:
类的个数成对增加; - 相关设计模式:
迭代器模式和访问者模式:访问者模式中扩展开放的部分作用于对象的操作上,迭代器模式中扩展开放的部分作用于集合对象的种类上; - 迭代器日常使用广泛,但日常使用的项目中,数据结构都会使用现成迭代器,几乎不会自己写一个迭代器。
18.2 迭代器模式代码解析
- 课程迭代器:
18.3 迭代器模式源码解析(jdk+mybatis)
- java.util.Iterator:hasNext();
Itr in ArrayList(java.util)
可以通过该接口查看迭代器的具体应用; - mybatis:DefaultCursor。
19 策略模式讲解+Coding+源码解析
19.1 策略模式讲解
- 定义:定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户;
实际应用时可大范围处理掉if…else…
类型:行为型; - 适用场景:
系统有很多类,而他们的区别仅仅在于他们的行为不同;
一个系统需要动态地在几种算法中选择一种; - 优点:
开闭原则;
避免使用多重条件转移语句;
提高算法的保密性和安全性; - 缺点:
客户端必须知道所有的策略类,并自行决定使用哪一个策略类;
产生很多策略类; - 相关设计模式:
策略模式和工厂模式:工厂模式是创建型的,接受指令创建出符合要求的具体对象;策略模式是行为型的,接受已经创建好的对象,实现不同行为;
策略模式和状态模式:策略模式客户端需要选择哪个策略,状态模式客户端不需关心具体状态,状态会自动转换;
19.2 策略模式coding
- 策略模式的初级应用:
避免重复new对象: - 策略工厂(消除if…else):
- 策略模式一般不独立使用,可结合单例、工厂、享元等方式一起实现;
19.3 策略模式源码解析(jdk+spring)
- Comparator:比较器,抽象策略;
Arrays sort、 TreeMap:用到Comparator; - Spring:Resource、InstantiationStrategy
- 策略和策略之间可以存在继承关系;
20 解释器模式讲解+源码解析
20.1 解释器模式讲解
- 定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子;
为了解释一种语言,而为语言创建的解释器;
类型:行为型; - 适用场景:
某个特定类型问题发生频率足够高; - 优点:
语法由很多类表示,容易改变及扩展此“语言”; - 缺点:
当语法规则数目太多时,增加了系统复杂度; - 相关设计模式:
解释器模式和适配器模式:适配器模式不需预先知道要适配的规则,解释器要把规则写好,根据规则进行解释; - 日常开发中,解释器应用较少,一般为开源包。
20.2 解释器模式coding
- 案例:通过栈进行计算
20.3 解释器源码解析-jdk+spring
- java.util.Pattern
- Spring:ExpressionParser