Java设计模式之访问者模式

Java23种设计模式

访问者模式包含两个元素:访问者、被访问者。其中根据访问者的不同,被访问者提供的数据也不同。
访问者模式主要实现方法为:静态重载,访问方法重载多个被访问者条件。

有三个工厂ABC可以生产手机和笔记本电脑两种产品,现在有两个经销商过来订货,分别制作笔记本电脑和手机。

  1. 创建工厂接口,里面有绑定经销商的方法。
public interface Factory {
    void setBroker(Broker broker);
}
  1. 创建工厂A、B、C,里面对经销商进行绑定,并且拥有制作手机和制作电脑两条流水线。
public class A implements Factory{
    public void madePhone() {
        System.out.print("工厂A制作了手机!\n");
    }

    public void madeComputer() {
        System.out.print("工厂A制作了笔记本!\n");
    }

    @Override
    public void setBroker(Broker broker) {
        broker.getGoods(this);
    }
}
public class B implements Factory{
    public void madePhone() {
        System.out.print("工厂B制作了手机!\n");
    }

    public void madeComputer() {
        System.out.print("工厂B制作了笔记本!\n");
    }
    @Override
    public void setBroker(Broker broker) {
        broker.getGoods(this);
    }
}
public class C implements Factory{
    public void madePhone() {
        System.out.print("工厂C制作了手机!\n");
    }

    public void madeComputer() {
        System.out.print("工厂C制作了笔记本!\n");
    }
    @Override
    public void setBroker(Broker broker) {
        broker.getGoods(this);
    }
}
  1. 定义经销商接口,里面重载了获取产品的方法,分别对应ABC工厂。
public interface Broker {
    void getGoods(A factory);
    void getGoods(B factory);
    void getGoods(C factory);
}
  1. 定义手机和计算机经销商,实现经销商接口。
public class BrokerPhone implements Broker{

    @Override
    public void getGoods(A factory) {
        factory.madePhone();
    }

    @Override
    public void getGoods(B factory) {
        factory.madePhone();
    }

    @Override
    public void getGoods(C factory) {
        factory.madePhone();
    }
}
public class BrokerComputer implements Broker{

    @Override
    public void getGoods(A factory) {
        factory.madeComputer();
    }

    @Override
    public void getGoods(B factory) {
        factory.madeComputer();
    }

    @Override
    public void getGoods(C factory) {
        factory.madeComputer();
    }
}
  1. 使用访问者模式-静态版
public class Test {
    public static void main(String[] args) {
        A a = new A();
        B b = new B();
        C c = new C();
        BrokerPhone brokerPhone = new BrokerPhone();
        BrokerComputer brokerComputer = new BrokerComputer();
        a.setBroker(brokerPhone);
        b.setBroker(brokerPhone);
        c.setBroker(brokerPhone);
        a.setBroker(brokerComputer);
        b.setBroker(brokerComputer);
        c.setBroker(brokerComputer);

    }
}

打印结果:

工厂A制作了手机!
工厂B制作了手机!
工厂C制作了手机!
工厂A制作了笔记本!
工厂B制作了笔记本!
工厂C制作了笔记本!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值