菜鸟硕枫设计模式系列之24 访问者模式

访问者模式是一种行为模式,它允许在不改变对象结构的前提下为一组对象动态添加新的行为。通过分离对象结构与作用于该结构上的操作,使得可以独立地改变它们。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

visit pattern是一种行为模式。主要特点是一个可遍历数据结构和比较稳固的对象,对于对象行为则可以方便添加,并且可以根据对象的类型表现不同的行为。

访问者模式类图:
[img]http://dl.iteye.com/upload/attachment/364939/55cf35cc-e52a-31ac-a1d1-d02bf7aec7fc.jpg[/img]


具体实现demo:
对象接口

package visitorPattern;

public interface Person {
void accept(Visitor visitor);
}


具体对象

package visitorPattern;

public class Man implements Person{

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

}


具体对象2

package visitorPattern;

public class Woman implements Person{

@Override
public void accept(Visitor visitor) {

visitor.visit(this);
}

}


访问者接口:

package visitorPattern;

public interface Visitor {
void visit(Man man);
void visit(Woman woman);
}



package visitorPattern;

public class Shop implements Visitor{

@Override
public void visit(Man man) {
System.out.println("Shopping is boring for " +man.getClass());
}

@Override
public void visit(Woman woman) {
// TODO Auto-generated method stub
System.out.println("Shopping is funny for " +woman.getClass());
}

}



package visitorPattern;

public class Work implements Visitor{

@Override
public void visit(Man man) {
// TODO Auto-generated method stub
System.out.println("Working is not so bad for " +man.getClass());
}

@Override
public void visit(Woman woman) {
// TODO Auto-generated method stub
System.out.println("Working is quite a hard time for " +woman.getClass());
}

}


测试类

package visitorPattern;

import java.util.ArrayList;

public class visitPatternTest {

public static void main(String[]args){
Man man = new Man();
Woman woman = new Woman();
ArrayList<Person> arrayList = new ArrayList<Person>();
ObjectStructrue o1 = new ObjectStructrue(arrayList);
o1.add(woman);
o1.add(man);

Work work = new Work();
o1.show(work);
System.out.println("------------------------------");
Shop shop = new Shop();
o1.show(shop);
}
}


备注:优点在于很方便的添加访问者,而不用去改变对象的其他属性或是实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值