设计模式-访问者模式 运用抽象的方法学习掌握设计模式

运用抽象的方法学习掌握设计模式

 概念

  1. 抽象:抽象就是抛开我们不关心的细节,只保留我们关注的属性特征来分析和处理。
  2. 职责:类或对象需要实现的功能,接口、公共方法、new方法统称为类的职责
  3. 构件:类、接口、子系统、组件、工具等统称为构件,包含供接口、需接口和内部实现,A代表供接口,其他构件可以通过A调用构件,B代表需接口,需要通过调用其他实现B接口的构件实现功能。

说明

      我们采用抽象的方法学习掌握设计模式,本文主要介绍访问者模式,通过案例、需求、分析、设计剖析设计模式,通过模式的职责视图表示可以很清晰的掌握设计模式的精髓-职责的变更。

      需要掌握的知识:设计原则、类之间的关系、统一职责分配原则

案例

需求      

      开学季,研究生本科生同时开学,老师负责给学生分派宿舍和学院。

 

分析

      根据需求我们可以抽象出三种构件,老师、学生、设施(宿舍、学院),这里还有个构件学生队列,我们暂且将它作为单独的构件处理,这里我们采用职责视图,只关注类的职责,抛开其他的细节(类之间的关系、类的属性、类的方法等)。可得到如下的职责视图:

 

实现

      在不采用设计模式的情况下实现也是非常简单的,我们这里忽略设计阶段,直接上代码。

      学生类:

      老师类:

 

 

      client:

 

      输出:

给本科生A分配宿舍
给研究生B分配宿舍
给本科生C分配宿舍
给本科生A分配学院
给研究生B分配学院
给本科生C分配学院

剖析:

  1. 能够实现功能
  2. 不满足单一职责原则
  3. 没有采用面向接口编程

 

职责分析:

      1 遍历学生,还要维护学生队列

      2判断学生类型

      3学院和宿舍安排

 

换位思考

      学院和宿舍就在那里,学生们知道自己是研究生还是本科生,让学生们自己去报到,学院和宿舍负责安排。

 

职责重新分配

      1 学生自己排队

      2宿舍和学院负责根据学生类型分配

      3学生自己去报到处报到

类图

 

 

代码

 

访问者模式

定义

       访问者模式是一种较为复杂的行为型模式,

      它包含访问者和被访问元素两个主要组成部分

       这些被访问的元素通常具有不同的类型,

      且不同的访问者可以对它们进行不同的访问操作

分析

      1 在本案例中,学生是被访问元素,宿舍、学院是访问者

      2 在访问者中没有采用if else判断而是采用了重载的多态机制实现了不同类型的访问

 

类图

总结

      

1 将职责重新分配,运用职责视图可以很容易的理解设计模式

2 重载是多态的一种,使用重载替换判断

3 使用通用职责分配原则的多态原则将职责重新分配