访问者模式实例男人和女人


package fangwenzhemoshi;

public abstract class Vistor {
public abstract void getManConclusion(男人 m);
public abstract void getWomanConclusion(女人 w);
}
package fangwenzhemoshi;

public abstract class Person {
public abstract void Accept(Vistor v);
}
package fangwenzhemoshi;

public class 男人 extends Person {

	@Override
	public void Accept(Vistor v) {
		v.getManConclusion(this);
	}

}
package fangwenzhemoshi;

public class 女人 extends Person {

	@Override
	public void Accept(Vistor v) {
		v.getWomanConclusion(this);
	}

}
package fangwenzhemoshi;

public class 成功 extends Vistor {

	@Override
	public void getManConclusion(男人 m) {
		System.out.println(m.getClass().getSimpleName()+this.getClass().getSimpleName()+"时"+"背后多有一个成功的女人");
	}

	@Override
	public void getWomanConclusion(女人 w) {
		System.out.println(w.getClass().getSimpleName()+this.getClass().getSimpleName()+"时"+"背后多有一个不成功的男人");
	}

}
package fangwenzhemoshi;

public class 失败 extends Vistor {

	@Override
	public void getManConclusion(男人 m) {
		System.out.println(m.getClass().getSimpleName()+this.getClass().getSimpleName()+"时"+"闷头喝酒谁也不用劝");
	}

	@Override
	public void getWomanConclusion(女人 w) {
		System.out.println(w.getClass().getSimpleName()+this.getClass().getSimpleName()+"时"+"眼泪汪汪谁劝也没用");
	}

}
package fangwenzhemoshi;

import java.util.ArrayList;

public class Structure {
private ArrayList<Person>elements=new ArrayList<Person>();
public void Attach(Person element)
{elements.add(element);
}
public void Remove(Person element)
{elements.remove(element);
}
public void Display(Vistor v)
{for(Person e:elements)
{e.Accept(v);
}
}
}
package fangwenzhemoshi;

public class Test {
public static void main(String args[])
{Structure s=new Structure();
s.Attach(new 男人());
s.Attach(new 女人());
成功 v1=new 成功();
s.Display(v1);
失败 v2=new 失败();
s.Display(v2);

}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
访问者模式是一种行为型设计模式,它允许你将算法与其所作用的对象分离开来。这种分离的实际结果是能在不修改对象结构的前提下向该结构添加新功能。 下面是一个 Java 实现的访问者模式示例: 首先,我们定义一个元素接口 Element,该接口有一个接受访问者的方法 accept: ```java public interface Element { void accept(Visitor visitor); } ``` 然后,我们定义两个元素类:AElement 和 BElement,它们都实现了 Element 接口: ```java public class AElement implements Element { @Override public void accept(Visitor visitor) { visitor.visit(this); } } public class BElement implements Element { @Override public void accept(Visitor visitor) { visitor.visit(this); } } ``` 接着,我们定义一个访问者接口 Visitor,该接口有两个访问方法 visit,分别对应上面的两个元素类: ```java public interface Visitor { void visit(AElement element); void visit(BElement element); } ``` 最后,我们定义一个具体的访问者类 ConcreteVisitor,它实现了 Visitor 接口,并根据需要实现 visit 方法: ```java public class ConcreteVisitor implements Visitor { @Override public void visit(AElement element) { System.out.println("访问者访问 AElement"); } @Override public void visit(BElement element) { System.out.println("访问者访问 BElement"); } } ``` 现在,我们可以测试访问者模式了: ```java public class Test { public static void main(String[] args) { Element a = new AElement(); Element b = new BElement(); Visitor visitor = new ConcreteVisitor(); a.accept(visitor); b.accept(visitor); } } ``` 输出结果为: ``` 访问者访问 AElement 访问者访问 BElement ``` 这说明访问者模式成功地将算法与元素对象分离开来了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值