前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【设计模式-访问者模式】

【设计模式-访问者模式】

作者头像
Liusy
发布2020-09-01 16:27:57
3370
发布2020-09-01 16:27:57
举报
文章被收录于专栏:Liusy01Liusy01

【导读】日常刷剧时,一个视频网站会对不同的用户开放不同的权限,比如vip可以看每日更新内容,vvip可以提前解锁内容,普通用户啥也没有。这种模式就是访问者模式。

一、定义

在不改变集合元素的情况下,为一个集合中的每个元素提供多种访问方式,即每个元素有多个访问者对象访问,相同的元素对不同的访问者会产生不一样的行为。

二、实例

就比如视频网站不同的用户可以看到不同的内容为例。

抽象用户对象:

代码语言:javascript
复制
public interface Visitor {
    1、访问免费网页
    void visitFree(FreeWebpage freeWebpage);
    2、访问vip网页
    void visitVip(VipWebpage vipWebpage);

}

vip用户对象:

代码语言:javascript
复制
public class VipVisitor implements Visitor {
    @Override
    public void visitFree(FreeWebpage freeWebpage) {
        System.out.println("Vip用户访问免费网页:"+ freeWebpage.getPageName());
    }

    @Override
    public void visitVip(VipWebpage vipWebpage) {
        System.out.println("Vip用户访问vip网页:"+ vipWebpage.getPageName()+",价格为"+vipWebpage.getPirce()+"元");
    }
}

普通用户:

代码语言:javascript
复制
public class GeneralVisitor implements Visitor {
    @Override
    public void visitFree(FreeWebpage freeWebpage) {
        System.out.println("普通用户访问免费网页:"+ freeWebpage.getPageName());
    }

    @Override
    public void visitVip(VipWebpage vipWebpage) {
        System.out.println("普通用户无法访问vip网页:"+ vipWebpage.getPageName()+",价格为"+vipWebpage.getPirce()+"元");
    }
}

网页接口对象:

代码语言:javascript
复制
public interface Webpage {
    void accept(Visitor visitor);
}

VIP网页对象:

代码语言:javascript
复制
public class VipWebpage implements Webpage{

    private String pageName;
    private int pirce;

    public VipWebpage(String pageName, int pirce) {
        this.pageName = pageName;
        this.pirce = pirce;
    }

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

免费网页对象:

代码语言:javascript
复制
public class FreeWebpage implements Webpage{

    private String pageName;

    public void setPageName(String pageName) {
        this.pageName = pageName;
    }

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

测试代码:

代码语言:javascript
复制
public static void main(String[] args) {
  List<Webpage> webpageList = new ArrayList<Webpage>();
  webpageList.add(new FreeWebpage("系统首页"));
  webpageList.add(new VipWebpage("vip专享",500));

  for (Webpage webpage : webpageList) {
      webpage.accept(new GeneralVisitor());
      webpage.accept(new VipVisitor());
  }

}

运行结果:

类图:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Liusy01 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档