访问者模式较为复杂,其定义是
定义:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。
访问者模式的类图
直接来看一道往年题:
看4-2题,它要求我们写一个visitor改造当前模式
使用一个visitor接口
interface ParkingFieldvisitor{
void visit(ConcreateParkingField pf);
}
写一个类实现它
class CheckOccupatationVisitor implements ParkingFieldVistor{
double fullRatio;
void visit(ConcreteParkingField pf){
//统计剩余停车位的代码,赋值fullRatio}
double getFullRatio()
{
return fullRatio;
}}
但是为了在客户端使用,我们不能直接visit而是要在原ParkingField中增加accept方法
pubilc class ConcreteParkingField implements ParkingField{
@Override
public void accept(ParkingFieldVisitor visitor)
{visitor.visit(this);
}
}
这样我们在客户端就能直接使用访问器得到占有比
ParkingField pf=...
ParkingFieldVisitor pfv =new CheckOccupationVisitor();
pf.accept(pfv);
double fullRatio=pfv.getFullRatio();