1 第一种
1 定义监听器的接口
package com.itheima.自定义手写监听器;
public interface PlayerListener {
void addHP();
}
2 定义被监听的对象
package com.itheima.自定义手写监听器;
public class Player {
private PlayerListener playerListener;
private int HP;
public void addHP(){
if (playerListener!=null){
playerListener.addHP();
}
}
public PlayerListener getPlayerListener() {
return playerListener;
}
public void setPlayerListener(PlayerListener playerListener) {
this.playerListener = playerListener;
}
public int getHP() {
return HP;
}
public void setHP(int HP) {
this.HP = HP;
}
}
3 定义监听器的具体实现类
package com.itheima.自定义手写监听器;
public class PlayerListenImpl implements PlayerListener{
@Override
public void addHP() {
System.out.println("玩家触发了加血的事件");
}
}
4 测试
package com.itheima.自定义手写监听器;
public class Test {
public static void main(String[] args) {
Player player= new Player();
player.setPlayerListener(new PlayerListenImpl());
player.addHP();
}
}
2 第二种
1 定义监听器的接口
package com.itheima.自定义监听器2;
public interface PlayerListener {
void bind();
void unbind();
}
2 定义被监听的对象
package com.itheima.自定义监听器2;
import java.util.HashMap;
public class Session {
private PlayerListener playerListener;
HashMap<String,Object> hs = new HashMap<>();
public void addAttribute(String key,Object vale){
hs.put(key,vale);
if (vale instanceof PlayerListener){
playerListener= (PlayerListener)vale;
playerListener.bind();
}
}
public void removeAttribute(String key,Object vale){
if (hs.containsKey(key)){
Object o = hs.get(key);
if (o!=null && o instanceof PlayerListener){
playerListener= (PlayerListener)vale;
playerListener.unbind();
}
}
}
}
3 定义监听器的具体实现类
package com.itheima.自定义监听器2;
public class Player implements PlayerListener{
@Override
public void bind() {
System.out.println("绑定");
}
@Override
public void unbind() {
System.out.println("解绑");
}
}
4 测试
package com.itheima.自定义监听器2;
public class Test {
public static void main(String[] args) {
Session session= new Session();
Player player= new Player();
session.addAttribute("player",player);
session.removeAttribute("player",player);
}
}