文档章节

每天一个设计模式之(18)-----访问者模式

SamrtLamb
 SamrtLamb
发布于 2017/07/25 16:19
字数 274
阅读 2
收藏 0

1.为什么要使用访问者模式

    博主看了好几遍,实在是看不出来访问者模式到底在讲什么东西,可能博主功力太浅- -,对该模式的使用场景也不太理解,先写着把。

2.类图

    简单解释一下,Element是要被访问的元素,是抽象的,有两个实现类,其中doSomething是业务逻辑方法,accept是关于访问者的方法。Visitor就是要抽象访问者,它可以访问Element的具体实现类,ConcreteVisitor是其实现类。

3.实现

    Element相关

public abstract class Element {

    public abstract void doSomething();

    public abstract void accept(Visitor visitor);
}


public class ConcretrElement1 extends Element{
    @Override
    public void doSomething() {
        System.out.println("I'm element1");
    }

    @Override
    public void accept(Visitor visitor) {
        visitor.visit(this);
    }
}

public class ConcretrElement2 extends Element{
    @Override
    public void doSomething() {
        System.out.println("I'm element2");
    }

    @Override
    public void accept(Visitor visitor) {
        visitor.visit(this);
    }


}

    visitor相关

public interface Visitor {

    public void visit(ConcretrElement1 element);
    public void visit(ConcretrElement2 element);
}



public class ConcreteVisitor implements Visitor{
    @Override
    public void visit(ConcretrElement1 element) {
        element.doSomething();
    }

    @Override
    public void visit(ConcretrElement2 element) {
        element.doSomething();
    }
}

    main方法

public class Main {

    public static void main(String[] args) {
        Element element1 = new ConcretrElement1();
        element1.accept(new ConcreteVisitor());
    }
}

//输出
I'm element1

 

© 著作权归作者所有

共有 人打赏支持
SamrtLamb
粉丝 0
博文 28
码字总数 19760
作品 0
杭州
(目录)设计模式(可复用面向对象软件的基础)

本系列“设计模式”博客使用Golang语言实现算法。所谓算法是指解决一个问题的步骤,个人觉得不在于语言。小弟只是最近学习Golang,所以顺带熟练一下语法知识,别无它意。 本系列博客主要介绍...

chapin
2015/01/13
0
0
设计模式 2014-12-19

book: 阎宏《JAVA与模式》 架构设计栏目 http://blog.csdn.net/enterprise/column.html 概要: http://bbs.csdn.net/forums/Embeddeddriver 23种设计模式分别是: 1.单例模式 2.工厂方法模式...

jayronwang
2014/12/19
0
0
java设计模式-- 单例模式

在很久之前,也就是在大二暑假的时候,那时候看马士兵的视频教程中有提到很多的设计模式。 java的设计模式大致可以分为3大类,23种设计模式。 其中,创建型模式有5种:单例模式、建造者模式、...

爱学习的逃课君
2014/11/27
0
0
迈向大牛的重要一步——掌握设计模式

IT职场的小菜经常有这样的疑问: 为什么一个相似的功能,大牛一会儿就搞定,然后悠闲地品着下午茶逛淘宝;而自己加班加点搞到天亮还做不完。 为什么用户提出需求变更后,大牛只需潇洒地敲敲键...

一枚Sir
2015/04/10
0
0
设计模式Java Design Pattern-工厂方法模式FactoryMethod

我的博客 一、 设计模式的分类 大体可以分为三类: 创建型模式(5个) 单例模式、原型模式、工厂方法模式、抽象工厂模式、建造者模式 结构性模式(7个) 适配器模式、装饰器模式、代理模式、...

勇敢写信
03/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Coding and Paper Letter(三十七)

资源整理。 1 Coding: 1.GDAL的node.js版本。 node gdal 2.R语言包echor,下载EPA许可设施的废水排放和空气排放数据。 echor 3.CPPTRAJ是一个旨在处理和分析分子动力学轨迹和从其分析中得出的...

胖胖雕
24分钟前
2
0
plsql developer如何创建新用户(users)

plsql developer如何创建新用户(users) 2017年05月04日 21:51:43 Alan_ZhQ 阅读数:14558 标签: plsql developer 更多 个人分类: plsql developer 版权声明:本文为博主原创文章,转载请...

linjin200
27分钟前
1
0
php安装编译时错误合集

php安装编译时错误合集 出现collect2: ld returned 1 exit status make: *** [sapi/cli/php] Error 1 出现此种错误最大可能是配置时出现了错误 libxml默认安装的路径是/usr/local,我把--wit...

alt_tab_jj
28分钟前
1
0
7.09-js保留小数点后两位

//num 是传过来的值,del是要保留几位 function valueFmt(num, del) { if (num != '') { if (del != 0) { num = parseFloat(num).toFixed(del); } var source = String(num).split("."); so......

静以修身2025
31分钟前
2
0
正则介绍_grep

10月16日任务 9.1 正则介绍_grep上 9.2 grep中 9.3 grep下 grep基本用法 grep [-cinvABC] 'word' filename centos7.x版本的grep实则为grep --color=auto -c 显示匹配到的行数 [root@localhos......

robertt15
39分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部