文档章节

每天一个设计模式之(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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java并发备忘

不安全的“先检查后执行”,代码形式如下: if(条件满足){ //这里容易出现线程安全问题//doSomething}else{//doOther} 读取-修改-写入 原子操作:使用CAS技术,即首先从V中读取...

Funcy1122
今天
0
0
SpringBoot2.0 停机

最近新建了个SpringBoot2.0的项目,因为原来一直使用的是传统的Tomcat部署war包的形式,所以这次SpringBoot内置Tomcat部署jar包的时候遇到了很多问题。其中一个就是因为没有外置的Tomcat容器...

Canaan_
昨天
0
1
Confluence 6 外部参考

一个外部参考的意思是任何站点链接到你 Confluence 的实例。任何时候当 Confluence 的用户单击这个外部链接的时候,Confluence 可以记录这次单击为参考。 在默认的情况下,外部链接的参考链接...

honeymose
昨天
0
0
Android中的设计模式之抽象工厂模式

参考 《设计模式解析》 第十一章 Abstract Factory模式 《设计模式:可复用面向对象软件的基础 》3.1 Abstract Factory 抽象工厂 对象创建型模式 《Android源码设计模式解析与实战》第6章 创...

newtrek
昨天
0
0
Redis | 地理空间(GEO)的一个坑

Redis的地理空间(Geo)是个好东西,轻轻松松的就可以把地图描点的问题处理了, 最近却遇到一个坑...Redis采用的Msater-Slave模式, 运用GEORADIUS在salve读取对应的数据,新增了从节点但是从不返...

云迹
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部