(六)观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型) (十)

2014-11-24 10:41:13 · 作者: · 浏览: 17
Listener onMouseMove) {
this.onMouseMove = onMouseMove;
}
//以下get方法
public String getId() {
return id;
}

public String getValue() {
return value;
}

public ClickListener getOnclick() {
return onclick;
}

public DblClickListener getOnDblClick() {
return onDblClick;
}

public MouseMoveListener getOnMouseMove() {
return onMouseMove;
}

}

//我们模拟一个html页面的button元素,LZ只添加个别属性,其余属性同理
public class Button {

private String id;//这相当于id属性
private String value;//这相当于value属性
private ClickListener onclick;//我们完全模拟原有的模型,这个其实相当于onclick属性
private DblClickListener onDblClick;//同理,这个相当于双击属性
private MouseMoveListener onMouseMove;//同理

//按钮的单击行为
public void click(){
onclick.click(new ClickEvent(this));
}
//按钮的双击行为
public void dblClick(){
onDblClick.dblClick(new DblClickEvent(this));
}
//按钮的鼠标移动行为
public void mouseMove(int x,int y){
onMouseMove.mouseMove(new MouseMoveEvent(this,x,y));
}
//相当于给id赋值
public void setId(String id) {
this.id = id;
}
//类似
public void setValue(String value) {
this.value = value;
}
//这个相当于我们在给onclick添加函数,即设置onclick属性
public void setOnclick(ClickListener onclick) {
this.onclick = onclick;
}
//同理
public void setOnDblClick(DblClickListener onDblClick) {
this.onDblClick = onDblClick;

}
//同理
public void setOnMouseMove(MouseMoveListener onMouseMove) {
this.onMouseMove = onMouseMove;
}
//以下get方法
public String getId() {
return id;
}

public String getValue() {
return value;
}

public ClickListener getOnclick() {
return onclick;
}

public DblClickListener getOnDblClick() {
return onDblClick;
}

public MouseMoveListener getOnMouseMove() {
return onMouseMove;
}

} 可以看到,按钮Button类有很多属性,都是我们经常看到的,id,value,onclick等等。下面我们模拟编写一个页面,这个页面可以当做是一个JSP页面,我们只有一个按钮,我们用JAVA语言把它描述出来,如下。

[java]
//假设这个是我们写的某一个特定的jsp页面,里面可能有很多元素,input,form,table,等等
//我们假设只有一个按钮
public class ButtonJsp {

private Button button;

public ButtonJsp() {
super();
button = new Button();//这个可以当做我们在页面写了一个button元素
button.setId("submitButton");//取submitButton为id
button.setValue("提交");//提交按钮
button.setOnclick(new ClickListener() {//我们给按钮注册点击监听器
//按钮被点,我们就验证后提交
public void click(ClickEvent clickEvent) {
System.out.println("--------单击事件代码---------");
System.out.println("if('表单合法'){");
System.out.println("\t表单提交");
System.out.println("}else{");
System.out.println("\treturn false");
System.out.println("}");
}
});
button.setOnDblClick(new DblClickListener() {
//双击的话我们提示用户不能双击“提交”按钮
public void dblClick(DblClickEvent dblClickEvent) {
System.out.println("--------双击事件代码---------");
System.out.println("alert('您不能双击"+dblClickEvent.getButton().getValue()+"按钮')");
}
});
button.setOnMouseMove(new MouseMoveListener() {
//这个我们只简单提示用户鼠标当前位置,示例中加入这个事件
//目的只是为了说明事件驱动中,可以包含一些特有的信息,比如坐标
public void mouseMove(MouseMoveEvent mouse