Java观察者模式
2014-12-22 11:28
190 查看
假定QQ可以在多个不同的客户端同时登陆(如:电脑,手机,pad,网页),当好友给我发消息时每个客户端都会接受到消息,基于这种业务使用观察者模式
定义观察者对象
添加三个客户端,手机,网页,电脑并实现QQObServer接口
再来一个抽象类AbstractQQ
创建QQ类继承AbstractQQ
测试类
控制台输出
如果以后再添加pad客户端只需要新建一个Pad类,然后在Test类中添加代码qq.addClient(new Pad());就能给pad发送消息了
还有一种方法是使用JDK的Observable类实现观察者模式
新建QQ类继承Observable类
三个客户端实现Observer接口的update方法
测试类
控制台输出
定义观察者对象
/** * 观察者接口 */ public interface QQObServer { public void sendMsg(String name); }
添加三个客户端,手机,网页,电脑并实现QQObServer接口
public class MobileQQ implements QQObServer{ @Override public void sendMsg(String name) { System.out.println(name + " 发消息到手机QQ"); } }
public class PCQQ implements QQObServer{ @Override public void sendMsg(String name) { System.out.println(name + " 发消息到电脑QQ"); } }
public class WebQQ implements QQObServer{ @Override public void sendMsg(String name) { System.out.println(name + " 发消息到网页QQ"); } }
再来一个抽象类AbstractQQ
public abstract class AbstractQQ { //所有客户端集合 ArrayList<QQObServer> allClient = new ArrayList<QQObServer>(); private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } //添加客户端 public void addClient(QQObServer stockObServer){ allClient.add(stockObServer); } //删除客户端 public void delClient(QQObServer stockObServer){ allClient.remove(stockObServer); } //好友发消息,通知所有客户端 public void sendMsg(){ for(int i=0;i<allClient.size();i++){ QQObServer s = allClient.get(i); s.sendMsg(name); } } }
创建QQ类继承AbstractQQ
public class QQ extends AbstractQQ{ public void sendMsg(){ setName("大橙子"); super.sendMsg(); } }
测试类
public class Test { public static void main(String[] args) { QQ qq = new QQ(); qq.addClient(new PCQQ()); qq.addClient(new MobileQQ()); qq.addClient(new WebQQ()); qq.sendMsg(); } }
控制台输出
大橙子 发消息到电脑QQ 大橙子 发消息到手机QQ 大橙子 发消息到网页QQ
如果以后再添加pad客户端只需要新建一个Pad类,然后在Test类中添加代码qq.addClient(new Pad());就能给pad发送消息了
还有一种方法是使用JDK的Observable类实现观察者模式
新建QQ类继承Observable类
public class QQ extends Observable{ public void sendMsg(String name){ setChanged(); notifyObservers(name); } }
三个客户端实现Observer接口的update方法
public class WebQQ implements Observer{ @Override public void update(Observable o, Object arg) { System.out.println(arg + " 发消息到网页QQ" ); } }
public class MobileQQ implements Observer{ @Override public void update(Observable o, Object arg) { System.out.println(arg + " 发消息到手机QQ" ); } }
public class PCQQ implements Observer{ @Override public void update(Observable o, Object arg) { System.out.println(arg + " 发消息到电脑QQ" ); } }
测试类
public class Test { public static void main(String[] args) { QQ qq = new QQ(); MobileQQ 手机QQ = new MobileQQ(); PCQQ 电脑QQ = new PCQQ(); WebQQ 网页QQ = new WebQQ(); qq.addObserver(手机QQ); qq.addObserver(电脑QQ); qq.addObserver(网页QQ); // qq.deleteObserver(网页QQ); //删除客户端 qq.sendMsg("大橙子"); } }
控制台输出
大橙子 发消息到网页QQ 大橙子 发消息到电脑QQ 大橙子 发消息到手机QQ
相关文章推荐
- Java设计模式之Observer 观察者模式
- java设计模式学习系列之六:Observer, 观察者模式---小例
- 观察者模式-Java自定义事件 推荐
- Java实现观察者模式
- Java实现观察者模式
- 【 应用以及剖析】之 java.util.Observer 观察者模式实现
- Java设计模式 Design Pattern:观察者模式 Observer Pattern
- Java对观察者模式的支持
- JAVA观察者模式(蚊子咬我)
- Java观察者模式
- java观察者模式
- Java中的观察者模式(Observer)
- 使用观察者模式实现Java应用程序设计MVC模式
- Java 设计模式(12) -- 观察者
- Java设计模式 -- 观察者模式(push方式)
- Java中的观察者模式(Observer)
- Java中的观察者模式(Observer)
- Java 观察者模式
- java设计模式_观察者模式
- java Observer 观察者模式