观察者模式和监听模式 骑猪看日落 2022-06-03 08:23 140阅读 0赞 观察者模式和监听模式完成的都是一样的工作就是**通知**的作用。我们现在试想一个案例,一个士兵在发现敌人之后需要报告长官。好的我们现在来着手写 Pawn 类 package test; import java.util.ArrayList; import java.util.List; public class Pawn { private List<Leader> leaders=new ArrayList<>(); public void attach(Leader l){ leaders.add(l); } public void detach(Leader l){ leaders.remove(l); } public void standGuard( ){ System.out.println("Pawn: find enemies ,I wanna report Sir"); if(true/*find enemies*/){ for(Leader leader:leaders){ leader.order( "find enemies"); } } } public static void main(String args[]){ Pawn p=new Pawn(); p.attach(new Captain()); p.standGuard(); } } Leader 类 package test; public interface Leader { public void order(String string); } Captain类 package test; public class Captain implements Leader { @Override public void order(String msg) { // TODO Auto-generated method stub System.out.println("Captain:recevie a message:"+msg); } } 上面的源码就是观察者模式的简单实现。可以看见其实很简单。就是让**一个类在触发某件事的时候去调用另一个类的方法** 而监听模式就是在观察者和被观察者之间建立一座桥梁 leader和Caption类没有变 Pawn 类 package listener; import java.util.ArrayList; import java.util.List; public class Pawn { private List<Leader> leaders=new ArrayList<>(); private List<Listener> listeners=new ArrayList<>(); public Pawn(){ attach(new Captain()); addListener(new Listener(){ @Override public void handleEvent(EventString es) { // TODO Auto-generated method stub for(Leader leader:leaders){ leader.order(es.getMsg()); } } }); } public void attach(Leader l){ leaders.add(l); } public void detach(Leader l){ leaders.remove(l); } public void addListener(Listener l){ listeners.add(l); } public void removeListener(Listener l){ listeners.remove(l); } public void standGuard( ){ System.out.println("Pawn: find enemies ,I wanna report Sir"); if(true/*find enemies*/){ EventString e=new EventString("find enemies: type =footman"); for(Listener l:listeners){ l.handleEvent(e); } } } public static void main(String args[]){ Pawn p=new Pawn(); p.standGuard(); } } listener类 package listener; public interface Listener { public void handleEvent(EventString e); } EventString类 package listener; public class EventString { private String msg; public EventString(String msg) { super(); this.msg = msg; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } } 我们可以发现 使用监听之后我们就可以分离观察者和被观察者了
还没有评论,来说两句吧...