spring源码设计模式分析(八)-访问者模式

简介: spring源码设计模式分析(八)-访问者模式

访问者模式

意图:主要将数据结构与数据操作分离。

写一个demo:,这个demo称之为元素,而元素里的每一个属性称之为每一条数据,从而推为数据库中的一张表。类的属性称之为数据结构,set和get方法称之为行为。属性结构非常稳定,行为变化非常快。访问者模式就是将数据结构与行为进行解耦,这两个也能在不同的地方操作。

  1. package com.weizhaoyang.visitor;

  2. import java.util.List;

  3. public class Demo {
  4.    private String name;
  5.    private String name1;
  6.    private List nameList;

  7.    public void access(){

  8.    }
  9.    public String getName() {
  10.        return name;
  11.    }

  12.    public void setName(String name) {
  13.        this.name = name;
  14.    }

  15.    public String getName1() {
  16.        return name1;
  17.    }

  18.    public void setName1(String name1) {
  19.        this.name1 = name1;
  20.    }

  21.    public List getNameList() {
  22.        return nameList;
  23.    }

  24.    public void setNameList(List nameList) {
  25.        this.nameList = nameList;
  26.    }

  27. }

1、属性的操作是由访问者来操作的,访问者根据访问属性的特点做出相应的回答。demo这个人必须接受访问者,访问者才能来访问。提供一个access的方法:

2、在不同的环境里面,上面的demo类中有两个属性如果都要修改的话,然而每一次都会将demo进行修改,会有很多问题,如果有一个访问者的话,结构不变,行为会通过访问方法来动态的进行改变,就解决了很多环境的问题。

代码如下:1、新建一个访问者的接口:

  1. package com.weizhaoyang.visitor;

  2. import java.util.List;

  3. public interface Visitor {
  4.    public void visitiorName( String name);
  5.    public void visitiorAge(String age);
  6.    public void visitiorEmp(List<String> listEmp);
  7.    public void visitiorFamily(List<String>listFamily);

  8. }

2、创建一个被访问者:

  1. package com.weizhaoyang.visitor;

  2. import java.util.List;

  3. /**
  4. * 老板对象
  5. */
  6. public class Boos {
  7.    /////////////////////////整体的结构
  8.    //名称
  9.    private  String name;
  10.    //年龄
  11.    private String age;
  12.    //公司员工名称
  13.    private List<String> listEmp;
  14.    //访问家庭
  15.    private  List<String> listFamily;
  16.    ///////////////////访问者
  17.    private Visitor  visitor;

  18.    public Boos(String name, String age, List<String> listEmp, List<String> listFamily) {
  19.        this.name = name;
  20.        this.age = age;
  21.        this.listEmp = listEmp;
  22.        this.listFamily = listFamily;
  23.    }

  24.    ///////////////////接收访问者的方法
  25.    public  void  accpet(Visitor  visitor){
  26.       this.visitor=visitor;
  27.       //授权
  28.        visitior();
  29.    }
  30.    //给访问者赋予权限
  31.    private  void  visitior(){
  32.        visitor.visitiorAge(age);
  33.        visitor.visitiorEmp(listEmp);
  34.        visitor.visitiorFamily(listFamily);
  35.        visitor.visitiorName(name);
  36.    }

  37. }

具体的访问者的代码如下:

  1. package com.weizhaoyang.visitor;

  2. import java.util.List;

  3. /**
  4. * 具体的某一个访问者
  5. */
  6. public class ImplVisitor implements  Visitor {
  7.    @Override
  8.    public void visitiorName(String name) {
  9.        System.out.println("访问名称"+name);
  10.    }

  11.    @Override
  12.    public void visitiorAge(String age) {
  13.        System.out.println("访问年龄"+age);

  14.    }

  15.    @Override
  16.    public void visitiorEmp(List<String> listEmp) {
  17.        System.out.println("访问员工"+listEmp.size());
  18.    }

  19.    @Override
  20.    public void visitiorFamily(List<String> listFamily) {
  21.        System.out.println("访问家人"+listFamily.size());
  22.    }
  23. }

测试类的代码如下:

  1. package com.weizhaoyang.visitor;

  2. import java.util.ArrayList;

  3. public class VisitorTest {
  4.    public static void main(String[] args) {
  5.        //初始化老板
  6.        Boos boos=new Boos("魏朝阳","24",new ArrayList<String>(20000),new ArrayList<String>(20));
  7.        //创造访问者
  8.        Visitor  visitor=new ImplVisitor();
  9.        //接收访问者
  10.        boos.accpet(visitor);


  11.    }
  12. }

运行的结果如下:

总结:这就是将结构和行为进行解耦,把set方法和get方法进行一个屏蔽,当属性的变化非常平凡,而结构非常稳定,不想修改这个对象的时候,就可以用访问者模式来动态给这些属性进行操作。

相关文章
|
10小时前
|
设计模式 Java Spring
spring源码设计模式分析(五)-策略模式
spring源码设计模式分析(五)-策略模式
|
10小时前
|
设计模式 Java Spring
spring源码设计模式分析(六)-模板方法模式
spring源码设计模式分析(六)-模板方法模式
|
10小时前
|
消息中间件 设计模式 缓存
spring源码设计模式分析(四)-观察者模式
spring源码设计模式分析(四)-观察者模式
|
10小时前
|
设计模式 存储 Java
spring源码设计模式分析(一)
spring源码设计模式分析(一)
|
10小时前
|
设计模式 搜索推荐 Java
spring源码设计模式分析(三)
spring源码设计模式分析(三)
|
10小时前
|
设计模式 Java Spring
spring源码设计模式分析-代理设计模式(二)
spring源码设计模式分析-代理设计模式(二)
|
4月前
|
设计模式 算法 编译器
【设计模式系列笔记】访问者模式
访问者模式是一种行为设计模式,旨在将算法与对象结构分离,使得能够在不修改元素类的前提下定义新的操作。这一模式的核心思想是在元素类中添加一个接受访问者的方法,从而实现在不同元素上执行不同操作的能力。
55 0
|
设计模式 Java 应用服务中间件
设计模式之责任链模式(Java实现)
设计模式之责任链模式(Java实现)
设计模式之责任链模式(Java实现)
|
设计模式 算法 安全
深入浅出设计模式 - 访问者模式
深入浅出设计模式 - 访问者模式
66 0
深入浅出设计模式 - 访问者模式
|
设计模式 安全 Java
深入浅出设计模式 - 装饰者模式
深入浅出设计模式 - 装饰者模式
105 0
深入浅出设计模式 - 装饰者模式