写点什么

Android—案例分析解读:观察者模式,androidstudio 社区

用户头像
Android架构
关注
发布于: 2021 年 11 月 05 日

}


package com.oop.demo5;


/**


  • 更新手机的规范

  • @author Liudeli


*/


public interface IPhone {


/**


  • 更新所有手机的行为标准规范


*/


public void update();


}


package com.oop.demo5;


/**


  • 魅族手机对象

  • @author Liudeli


*/


public class MeizuPhone implements IPhone {


public void update() {


System.out.println("魅族手机需要去更新 QQ 了哦...");


}


}


package com.oop.demo5;


/**


  • 小米手机对象

  • @author Liudeli


*/


public class MIPhone implements IPhone {


public void update() {


System.out.println("小米手机更新 QQ 了...");


}


}


package com.oop.demo5;


/**


  • 三星手机对象

  • @author Liudeli


*/


public class SamsungPhone implements IPhone {


public void update() {


System.out.println("三星手机该更新 QQ 啦...");


}


}


package com.oop.demo5;


/**


  • 步步高手机对象

  • @author Liudeli


*/


public class VivoPhone implements IPhone {


public void update() {


System.out.println("步步高手机需要去更新手机 QQ 了哦...");


}


}


/**


  • 测试端程序

  • @author Liudeli


*/


public class Main {


public static void main(String[] args) {


// 使用戴尔服务器,来更新手机 QQ


Service service = new DELLService();


// 增加观察者(增加需要更新的手机对象)


service.add(new MIPhone());


service.add(new MeizuPhone());


service.add(new SamsungPhone());


service.add(new VivoPhone());


// 给手机发出通知


service.sendUpdateMsg();


System.out.println("省略...");


}


}



如果某天,戴尔服务器出问题了,自动切换到备用服务器 华为服务器:


// 使用华为服务器,来更新手机 QQ


Service service = new HUAWEIService();





[](

)案例二:(通知同事)


package com.oop.demo3;


/**


  • 定义观察者抽象类

  • @author Liudeli


*/


public abstract class Observer {


private String name;


private ISecretary secretary;


public Observer(String name, ISecretary secretary) {


this.name = name;


this.secretary = secretary;


}


/**


  • 更新


*/


public abstract void update();


}


package com.oop.demo3;


/**


  • 不能依赖细节,细节应该依赖抽象,老板,和秘书,和其他秘书都是细节,抽象则是这些细节所定义的规范

  • @author Liudeli


*/


public interface ISecretary {


/**


  • 增加

  • @param stockObserver


*/


public void add(Observer observer);


/**


  • 通知


*/


public void notice();


/**


  • 前台状态


*/


public String getAction();


public void setAction(String action);


}


package com.oop.demo3;


/**


  • 定义股票观察员对象

  • @author Liudeli


*/


public class StockObserver extends Observer{


private String name;


private ISecretary secretary;


public StockObserver(String name, ISecretary secretary) {


super(name, secretary);


this.name = name;


this.secretary = secretary;


}


@Override


public void update() {


System.out.println(secretary.getAction() + name + " 请你关闭股票行情,继续工作");


}


}


package com.oop.demo3;


/**


  • 定义看 NBA 的同事

  • @author Liudeli


*/


public class NBAObserv


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


er extends Observer {


private String name;


private ISecretary secretary;


public NBAObserver(String name, ISecretary secretary) {


super(name, secretary);


this.name = name;


this.secretary = secretary;


}


@Override


public void update() {


System.out.println(secretary.getAction() + name + " 请你关闭 NBA 视频画面,继续工作");


}


}


package com.oop.demo3;


import java.util.ArrayList;


import java.util.List;


/**


  • 前台秘书类

  • @author Liudeli


*/


public class Secretary implements ISecretary{


/**


  • 定义同事集合


*/


private List<Observer> list = new ArrayList<Observer>();


/**


  • 增加

  • @param stockObserver


*/


public void add(Observer observer) {


list.add(observer);


}


/**


  • 通知


*/


public void notice() {


for (Observer observer : list) {


observer.update();


}


}


/**


  • 前台状态


*/


private String action;


public String getAction() {


return this.action;


}


public void setAction(String action) {


this.action = action;


}


}


package com.oop.demo3;


import java.util.ArrayList;


import java.util.List;


/**


  • 老板对象

  • @author Liudeli


*/


public class Boss implements ISecretary {


/**


  • 定义同事集合(具体抽象)


*/


private List<Observer> list = new ArrayList<Observer>();


/**


  • 增加

  • @param stockObserver


*/


public void add(Observer observer) {


list.add(observer);


}


/**


  • 通知


*/


public void notice() {


for (Observer observer : list) {


observer.update();


}


}


/**


  • 前台状态


*/


private String action;


public String getAction() {


return this.action;


}


public void setAction(String action) {


this.action = action;


}


}


package com.oop.demo3;


/**


  • 测试程序

  • @author Liudeli


*/


public class Main {


public static void main(String[] args) {


// 前台小姐如花


ISecretary secretary = new Secretary();


// 看股票的两位同事


StockObserver stockObserver1 = new StockObserver("刘奋", secretary);


StockObserver stockObserver2 = new StockObserver("刘忙", secretary);


// 看 NBA 的一位同事


NBAObserver nbaObserver = new NBAObserver("黄流", secretary);


// 如花记下两位同事


secretary.add(stockObserver1);


secretary.add(stockObserver2);


// 如花记下一个看 NBA 的同事


secretary.add(nbaObserver);


// 发现老板回来了


secretary.setAction("老板回来了!");


// 通知通知,老板回来了


secretary.notice();


}


}


运行结果:






[](

)简化理解:

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android—案例分析解读:观察者模式,androidstudio社区