Java进阶篇设计模式之十 ---- 访问者模式和中介者模式

 

前言

这里为了方便理解,我们使用一个简单的示例来加以说明。
图书馆有一台电脑,有两个账户,其中一个是管理员的账户,拥有所有权限,但是设置了密码;另一个账户是不需要密码,但是只能玩游戏和看图片。张三和李四先后使用了这台电脑,那么他们就可以当作是访问者。
那么我们便可以根据这里例子来使用访问者模式进行开发,首先定义一个抽象的访问者,拥有玩游戏和看图片的方法;然后再定义一个抽象节点电脑,接受这个请求。
那么这个抽象类的代码如下:

 interface Visitor {    void visit(Games games);    void visit(Photos photos); }  interface Computer {    void accept(Visitor visitor); }

定义好该抽象类之后,我们需要设计不同的访问者对节点进行不同的处理。并且需要设计具体节点类实现刚刚抽象节点的方法。

那么代码如下:

class ZhangSan implements Visitor {    @Override    public void visit(Games games) {        games.play();    }     @Override    public void visit(Photos photos) {        photos.watch();    } }  class LiSi implements Visitor {    @Override    public void visit(Games games) {        games.play();    }    @Override    public void visit(Photos photos) {        photos.watch();    } }  class Games implements Computer {    @Override    public void accept(Visitor visitor) {        visitor.visit(this);    }     public void play() {        System.out.println("play lol");    } }  class Photos implements Computer {    @Override    public void accept(Visitor visitor) {        visitor.visit(this);    }        public void watch() {        System.out.println("watch scenery photo");    } } 

最后我们还需要定义一个结构对象角色,提供一个的接口并允许该访问者进行访问,它可以对这些角色进行增加、修改或删除等操作和遍历。
代码如下:

class ObjectStructure {      private List<Computer> computers = new ArrayList<Computer>();      public void action(Visitor visitor) {         computers.forEach(c -> {             c.accept(visitor);         });     }     public void add(Computer computer) {         computers.add(computer);     } }

编写好之后,那么我们来进行测试。
测试代码如下:


                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信