什么是访问者模式?访问者模式是类与类之间的双向依赖关系(关系有继承,组合和依赖,相当于父子,朋友和情人)。下面的例子就是双向依赖,比较绕,仔细看看吧
class Shape{
void draw(MyWindow myWindow) {
System.out.println("画一个window");
}
}
class MyWindow{
void draw(Shape shape) {
shape.draw(this);
}
}
public class YiLaiDemo {
public static void main(String[] args) {
MyWindow m=new MyWindow();
m.draw(new Shape());
}
}
这里有两次依赖步骤。
让别人以为MyWindow也有draw功能,不过你看MyWindow定义的方法是draw,明显抄了Shape的方法名。
对外进行魔术表演:当MyWindow很潇洒的对外宣称自己有draw功能,关起门来立马跪下求Shape,还是你还draw吧,我其实是冒充的。
我们来看一个例子,需求是软件能画一个正方形,圆形或线条,那么抽象出来一个公有父类,结构如下:
class SHAPE{
public void draw() {
System.out.println("shape draw"); //公共方法:画图
}
}
class Rectangle extends SHAPE{
public void draw() {
System.out.println("画正方形");
}
}
class Circle extends SHAPE{
public void draw() {
System.out.println("画圆形");
}
}
class Line extends SHAPE{
public void draw() {
System.out.println("画线条");
}
}
public class Test5 {
public static void main(String[] args) {
SHAPE s=new Line();//这里是多态,没问题
s.draw();
}
}
上面都是简单的多态,没问题。
需求变了,现在需要每个图形都可以放