设计模式学习笔记(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)策略”