Android—用最简单的案例Demo带你分析解读:Android观察者模式

*/
public abstract class Service {

/**

  • 增加我要通知者,这里存入的是抽象(抽象包括抽象类或)
  • @param iPhone
    */
    public abstract void add(IPhone iPhone);

/**

  • 发出更新消息给各个手机
    */
    public abstract void sendUpdateMsg();

}

package com.oop.demo5;

import java.util.ArrayList;
import java.util.List;

/**

  • 华为服务器对象
  • @author Liudeli

*/
public class HUAWEIService extends Service {

private List listPhone = new ArrayList();

@Override
public void add(IPhone iPhone) {
listPhone.add(iPhone);
}

@Override
public void sendUpdateMsg() {
for (IPhone iphone : listPhone) {
iphone.update();
}
}

}

package com.oop.demo5;

import java.util.ArrayList;
import java.util.List;

/**

  • 戴尔服务器对象
  • @author Liudeli

*/
public class DELLService extends Service {

private List listPhone = new ArrayList();

@Override
public void add(IPhone iPhone) {
listPhone.add(iPhone);
}

@Override
public void sendUpdateMsg() {
for (IPhone iphone : listPhone) {
iphone.update();
}
}

}

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 s
tatic 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 NBAObserver 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 list = new ArrayList();

/**

  • 增加
  • @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 list = new ArrayList();

/**

  • 增加
  • @param stockObserver
    */
    public void add(Observer observer) {
    list.add(observer);
    tion) {
    this.action = action;
    }

}

package com.oop.demo3;

import java.util.ArrayList;
import java.util.List;

/**

  • 老板对象
  • @author Liudeli

*/
public class Boss implements ISecretary {

/**

  • 定义同事集合(具体抽象)
    */
    private List list = new ArrayList();

/**

  • 增加
  • @param stockObserver
    */
    public void add(Observer observer) {
    list.add(observer);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简明、完整、全面的安卓开发demo集合,包含如下示例 1、LinearLayout Button、RadioGroup、 CheckBox 2、TableLayout 3、FrameLayout 霓虹灯效果 4、RelativeLayout 梅花效果 5、自定义view跟着触点走的小球 6、 ListView 列表视图 7、WebView web视图 8、ToggleButton 动态布局效果 9、AnalogClock 、 DigitalClock and Chronometer 时钟和数字日期 10、AutoCompleteTextView 根据输入自动补充可能的全部 11、Spinner View 选择框(弹出框形式选择) 12、DatePicker TimePicker View 日期时间选择器 13、ProgressBar View 普通进度条、显示在标题栏上的进度条 14、RatingBar View 评级 15、 SeekBar 拖动条,音量调节效果 16、ScrollView 、HorizontalScrollView 垂直和水平滚动条 17、ScrollView 、HorizontalScrollView 垂直和水平滚动条 18、ExpandableListView 分组可展开收缩的ListView 19、Notification 状态栏通知 20、GridView、ImageSwitcher 21、SmsManager 消息管理器,发短信(这里是模拟器只能给其它模拟器发短信) 22、Intent Action、Category属性 测试 23、系统 Action、Category属性 24、ClipDrawable 徐徐展开的风景 25、AnimationDrawable 会动的图片 26、Menu、SubMenu、ContextMenu xml配置menu 27、Attribute 自定义view的duration属性 控制图片的透明度 28、Bitmap、BitmapFactory 图形与图像处理 29、Canvas 绘制自定义图形 30、Canvas 采用双缓存实现画图板 31、SharedPreference 简单的key-value数据存取 32、SQLiteDatabase 安卓客户端的嵌入式数据库 33、GestureDetector + ViewFlipper实现翻页效果 34、GestureLiberay 自定义手势 35、GestureLiberay 通过自定义的手势实现用户操作 36、TextToSpeech 语音朗读 37、ContentProvider、ContentResolver 应用之间共享数据 38、 Service 相当于没有界面的activity 39、Activity与Service运行中通信 40、Service 相当于没有界面的activity 41、AIDL Service android中的跨进程调用 客户端,服务端见AidlService 42、BroadcastReceiver 接收广播消息 43、非UI线程中不能操作UI线程中的View测试 44、ImageSwitcher animation gesture实现可以滑动的跑马灯 45、下载状态栏显示下载进度 46、Gallery3d效果 47、ListView 上拉加载更多效果 48、异步加载图片的二级缓存技术 49、QQ的好友列表展示效果 50、Fragment + ViewPager实现tab滑动切换 51、能够显示在桌面前面的的歌词效果 52、activity切换特效

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值