设计模式学习笔记(19)访问者

本文实例代码:https://github.com/JamesZBL/java_design_patterns

在访问者(Visitor)模式中,客户通过一个访问者类,将对于一个数据结构的不同元素的访问方法封装起来,这样,对一类元素的访问方法可以通过在访问者中修改逻辑而实现,这种类型的设计模式属于行为型模式。

如果对一个数据结构的访问欲获得的结果,需要该结构内部属性经过一系列计算才能得到,那么一般情况下,我们会将计算过程写到数据结构中,用一个统一的接口约束数据结构的计算方法,保证都能获得一致的结构。但是如果有新的计算功能需求,就要对数据结构类进行修改,显然,这不符合开闭原则。所以我们可以将对不同数据结构中的属性的计算方法抽象到一个访问者类中。这样,当需要修改算法的时候只需修改访问者中的具体逻辑就可以了,一定程度上将数据结构和算法分离开来了。
继续阅读“设计模式学习笔记(19)访问者”

设计模式学习笔记(18)模板方法

本文实例代码:https://github.com/JamesZBL/java_design_patterns

模板方法(Template Method) 模式是行为型模式的一种,通常的实现途径是定义一个模板抽象类,将需要具体实现的方法定义为抽象方法,由模板类的子类来重载实现。

所谓模板,就是事先定义好的,为了实现某个功能而专门定义的框架,它对其中的每个组成部分进行了规范。现实生活中,有许多和模板方法相似的例子,比如到银行办理业务要填写各种表格,表格的内容都是事先定义好的,客户只需按要求如实填写,经过工作人员的处理后就能办理相关的业务。这里的表格就是一种模板,需要用户填写的内容就是模板中的方法,业务的实现由用户填写的内容决定。

使用模板的好处是可以规范功能实现的整体模式,使功能的进一步实现变得很容易,所有模板的实现类都会按照模板的约束来实现具体的功能。
继续阅读“设计模式学习笔记(18)模板方法”

设计模式学习笔记(17)策略

本文实例代码:https://github.com/JamesZBL/java_design_patterns

在策略(Strategy Pattern)模式中,一个类的行为或某个接口的实现方法可以在运行时进行更换,通常这种类型的设计模式属于行为型模式。

在策略模式中,我们通常的做法是创建一个对象来封装各种策略,创建一个上下文对象,策略对象作为上下文对象的子对象被调用,通过策略对象的改变就可以实现上下文对象在不同策略下的具体功能。现实生活中就有策略模式的例子,比如用不同的方式出行,乘坐不同的交通工具就是应用了不同的策略。
继续阅读“设计模式学习笔记(17)策略”

设计模式学习笔记(16)状态

本文实例代码:https://github.com/JamesZBL/java_design_patterns

状态模式(State)最明显的特点是可以使类的行为根据不同的状态变化而变化,很明显,这是一种行为型模式。通常用一个上下文对象将某个类的对象进行一层包裹,将该类在不同状态下的具体行为分别交给不同状态的上下文类来实现。该模式的完美的将类的行为和它的状态进行了解耦,如果某个类增添一种状态,只需要增加新的状态类就可以了。
继续阅读“设计模式学习笔记(16)状态”

设计模式学习笔记(15)观察者

本文实例代码:https://github.com/JamesZBL/java_design_patterns

观察者(Observer)模式实现了一种一对多的通信方式,它的核心是由多个对象监听中心对象,中心对象发生某种变化时将这个变化通知给关注它的周边对象,所以,它又被称为 “订阅-发送” 模式。

在现实生活中也有许多和观察者模式的运作方式相似的例子,比如当我们订阅某个公众号后,一旦该公众号的主人发不了新的文章或消息,所有订阅这个公众号的用户都会受到这个消息。这些用户就对应着观察者模式里的订阅者,公众号对应着发布者,一旦订阅者对关注点失去了兴趣,就会取消对发布者的订阅,也就不会再受到发布者的任何消息了。所以,实现观察者模式的主要方法就是订阅和发布。

继续阅读“设计模式学习笔记(15)观察者”

设计模式学习笔记(13)中介者

本文实例代码:https://github.com/JamesZBL/java_design_patterns

中介者(Mediator)模式是用来降低多个对象和类之间的通信复杂性的。这种模式中通常提供一个充当中介者角色的类,用来承担“中心化”或“集中化”的职能,与各个对象之间都可以分别相互通信,它的一大优势是减少或避免其他对象之间的互相通信,在通信方面降低了耦合度。
继续阅读“设计模式学习笔记(13)中介者”

设计模式学习笔记(11)解释器

本文实例代码:https://github.com/JamesZBL/java_design_patterns

解释器(Interpreter)模式提供了校验语言的语法或表达式的途径,它属于行为型模式的一种。这种模式通常会提供一个表达式接口,通过这个接口可以解释对应特定环境的上下文。

解释器模式在日常开发的过程中不是很常用,但它在 SQL 解析、符号处理引擎、编译程序等场景中使用非常广泛。
继续阅读“设计模式学习笔记(11)解释器”