设计模式之访问者模式

小明长大了,他决定去找找多年未见的两个好朋友小刚和小强。还记得当年大家一起组建了帮派,小刚能写文,小强能打架,三人在一起赛过诸葛亮。而如今大家天各一方,也不知道都混得怎么样。
小明这么多年社会上摸爬滚打深谙“天下熙熙,皆为利来。天下攘攘,皆为利往之理”,决定先聊聊探测一下这俩兄弟有没有钱。有钱和没钱处理方式当然不一样了。有钱了要多多交往,没钱就少来往。万一他生个病借我钱怎么办?
这段逻辑就用到了访问者模式,访问者小明根据小刚和小强类型不同执行了不同的方法。下来看看具体的代码。
首先是访问者的接口,访问者就两个方法一个针对的是穷人,另一个是富人

public interface IVisitor {
    void visit(PoorMan poorMan);
    void visit(RichMan richMan);
}

甭管穷人富人咱表面上至少是朋友嘛,既然是朋友来了肯定要接待拜访者嘛~有个朋友接口,里面就一个允许访问者访问的方法。

public interface IFriend {
     void accept(IVisitor visitor);
}

穷人是朋友,有被访问的方法

public class PoorMan implements IFriend {
    private String name;
    public String getName() { return name; }

    public PoorMan(String name) {
        this.name = name;
    }

    public void accept(IVisitor visitor) {
        visitor.visit(this);
    }
}

富人也是朋友,也有被访问的方法。不过跟穷人的不一样

public class RichMan implements IFriend {
    String name;
    public String getName() { return name; }

    public RichMan(String name) { 
        this.name = name;
    }
    public void accept(IVisitor visitor) {
        visitor.visit(this);
    }
}

最后看看场景

public class Client {
    public static void main(String[] args) {
        Visitor ming = new Visitor();//小明去访问朋友
        PoorMan qiang = new PoorMan("小强");//有个穷人小强
        qiang.accept(ming);
        RichMan gang = new RichMan("小刚");//还有个符号小刚
        gang.accept(ming);
    }
}

运行结果:
小强这个人没钱以后一定要少交往
小刚这个哥们有钱问问他大腿缺挂坠不

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值