Java23种设计模式
访问者模式包含两个元素:访问者、被访问者。其中根据访问者的不同,被访问者提供的数据也不同。
访问者模式主要实现方法为:静态重载,访问方法重载多个被访问者条件。
有三个工厂ABC可以生产手机和笔记本电脑两种产品,现在有两个经销商过来订货,分别制作笔记本电脑和手机。
- 创建工厂接口,里面有绑定经销商的方法。
public interface Factory {
void setBroker(Broker broker);
}
- 创建工厂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);
}
}
- 定义经销商接口,里面重载了获取产品的方法,分别对应ABC工厂。
public interface Broker {
void getGoods(A factory);
void getGoods(B factory);
void getGoods(C factory);
}
- 定义手机和计算机经销商,实现经销商接口。
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();
}
}
- 使用访问者模式-静态版
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制作了笔记本!