类的四大基本关系:
a.关联关系:如A类调用B类。
b.继承关系:如A类是B类的父类。
c.聚合关系:如装橘子的箱子,箱子是否存在与里面装没装橘子没有任何关系,也就是说橘子不会影响箱子的存在。
d.组合关系:如一个小组,小组是否存在与小组中是否有组员是息息相关的,如果没有组员,小组就不存在了。
监听器模式:事件源经过事件的封装传给监听器,当事件源触发事件后,监听器接收到事件对象可以回调事件的方法
观察者模式:观察者(Observer)相当于事件监听者,被观察者(Observable)相当于事件源和事件,执行逻辑时通知observer即可触发oberver的update,同时可传被观察者和参数
1、定义监听器
public interface Listener {
public void action();
}
public class ClickListener implements Listener {
@Override
public void action() {
System.out.println("ClickListener action!");
}
}
public class DoubleClickListener implements Listener {
@Override
public void action() {
System.out.println("DoubleClickListener action!");
}
}
2、定义事件
public interface Event {
int getType();
}
public class ClickEvent implements Event {
@Override
public int getType() {
return 1;
}
}
public class DoubleClickEvent implements Event {
@Override
public int getType() {
return 2;
}
}
3、定义绑定事件的对象
public class Client {
Listener listener;
Event event;
public static void main(String[] args) {
// 1、假定client是数据源
Client client = new Client();
// 2、给数据源绑定事件监听
Listener listener = new DoubleClickListener();
client.addListener(listener);
// 3、触发“双击”事件
DoubleClickEvent dce = new DoubleClickEvent();
client.addEvent(dce);
// 4、触发“单击”事件
ClickEvent ce = new ClickEvent();
client.addEvent(ce);
}
public void addListener(Listener listener) {
this.listener = listener;
}
public void addEvent(Event event) {
//首先必须要存在添加了监听,如果没有监听就没有任何动作
if (this.listener != null) {
this.event = event;
int eventType = event.getType();
switch (eventType) {
case 1:
if (this.listener.getClass() == ClickListener.class) {
this.listener.action();
} else {
System.err.println("没有绑定单击事件");
}
break;
case 2:
if (this.listener.getClass() == DoubleClickListener.class) {
this.listener.action();
} else {
System.err.println("没有绑定双击事件");
}
break;
default:
break;
}
}
}
}