Android观察者模式的简单实现demo
观察者模式就是:当一个对象的状态发送改变时,所有依赖于它的对象都能得到通知并被自动更新。
下面介绍一种简单的使用方法,(下面有demo链接)先看一下project的目录构成:
ObserverListener是观察者接口,SubjectListener是被观察者接口,ObserverManager是观察者的管理类。
/**
* Created by Administrator on 2016/9/28.
* 观察者接口
*/ public interface ObserverListener {
void observerUpData(String content);//刷新操作
}
/**
* Created by Administrator on 2016/9/28.
* 被观察者接口
*/ public interface SubjectListener {
void add(ObserverListener observerListener);
void notifyObserver(String content);
void remove(ObserverListener observerListener);
}
下面是比较重要的管理类:
public class ObserverManager implements SubjectListener {
private static ObserverManager observerManager;
//观察者接口集合
private List<ObserverListener> list = new ArrayList<>(); /**
* 单例
*/
public static ObserverManager getInstance(){
if (null == observerManager){
synchronized (ObserverManager.class){
if (null == observerManager){
observerManager = new ObserverManager();
}
}
}
return observerManager;
} /**
* 加入监听队列
*/
@Override
public void add(ObserverListener observerListener) {
list.add(observerListener);
} /**
* 通知观察者刷新数据
*/
@Override
public void notifyObserver(String content) {
for (ObserverListener observerListener : list){
observerListener.observerUpData(content);
}
} /**
* 监听队列中移除
*/
@Override
public void remove(ObserverListener observerListener) {
if (list.contains(observerListener)){
list.remove(observerListener);
}
}
}
效果是当点击ThirdActivity中的按钮时,执行ObserverManager.getInstance().notifyObserver("观察者请刷新信息");
然后所有添加到监听队列的Activity都会更新数据,ObserverManager.getInstance().add(this)就是添加到监听队列的方法,更新操作执行在observerUpData(String content)方法中。
下面是3个Activity,很简单:
public class MainActivity extends AppCompatActivity implements ObserverListener {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.tv);
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//ObserverManager.getInstance().notifyObserver("观察者请刷新信息");
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
}
}); //注册
ObserverManager.getInstance().add(this); } @Override
public void observerUpData(String content) {
Log.d("vvvvvvvvvvvvvvv","11111111111");
textView.setText(content);
}
}
public class SecondActivity extends AppCompatActivity implements ObserverListener {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
textView = (TextView) findViewById(R.id.tv2);
findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(SecondActivity.this,ThirdActivity.class);
startActivity(intent);
}
}); //注册
ObserverManager.getInstance().add(this);
} @Override
public void observerUpData(String content) {
Log.d("vvvvvvvvvvvvvvv","2222222222");
textView.setText(content);
}
}
public class ThirdActivity extends AppCompatActivity implements ObserverListener {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
textView = (TextView) findViewById(R.id.tv3);
findViewById(R.id.btn3).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ObserverManager.getInstance().notifyObserver("观察者请刷新信息");
}
}); //注册
ObserverManager.getInstance().add(this);
} @Override
public void observerUpData(String content) {
Log.d("vvvvvvvvvvvvvvv","33333333333");
textView.setText(content);
}
}
布局都是一个TextView和一个Button。
demo链接http://yun.baidu.com/share/link?shareid=2719259515&uk=1969594477
Android观察者模式的简单实现demo的更多相关文章
- ESA2GJK1DH1K基础篇: Android连接MQTT简单的Demo
题外话 我老爸也问我物联网发展的趋势是什么!!!!!! 我自己感觉的:(正在朝着 "我,机器人" 这部电影的服务器方向发展) 以后的设备都会和服务器交互,就是说本地不再做处理,全部 ...
- I.MX6 Android backlight modify by C demo
/************************************************************************** * I.MX6 Android backligh ...
- Android -BLE蓝牙小DEMO
代码地址如下:http://www.demodashi.com/demo/13890.html 原文地址: https://blog.csdn.net/vnanyesheshou/article/de ...
- [Android]RecyclerView的简单演示样例
去年google的IO上就展示了一个新的ListView.它就是RecyclerView. 下面是官方的说明,我英语能力有限,只是我大概这么理解:RecyclerView会比ListView更具有拓展 ...
- Android中Service的一个Demo例子
Android中Service的一个Demo例子 Service组件是Android系统重要的一部分,网上看了代码,很简单,但要想熟练使用还是需要Coding. 本文,主要贴代码,不对Servic ...
- C#可扩展编程之MEF学习笔记(一):MEF简介及简单的Demo
在文章开始之前,首先简单介绍一下什么是MEF,MEF,全称Managed Extensibility Framework(托管可扩展框架).单从名字我们不难发现:MEF是专门致力于解决扩展性问题的框架 ...
- Android HandlerThread 的使用及其Demo
今天我们一起来学习下一个Android中比较简单的类HandlerThread,虽然它的初始化有点小麻烦. 介绍 首先我们来看看为什么我们要使用HandlerThread?在我们的应用程序当中为了实现 ...
- Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(二)
然后是项目下的文件:完整的项目请看 上一篇 Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(一) 项目下的springmvc-servlet.xml配置文件: ...
- Android:PopupWindow简单弹窗改进版
Android:PopupWindow简单弹窗 继续上一节的内容,改进一下,目标是点击菜单后把菜单收缩回去并且切换内容,我使用的是PopupWindow+RadioGroup public class ...
随机推荐
- C# 实现一个可取消的多线程操作 示例
private void button1_Click(object sender, EventArgs e) { //定义一个为可取消资源标志 CancellationTokenSource cts ...
- Native wifi API使用
写于博客园,自己迁过来: 一.WlanOpenHandle打开一个客户端句柄 DWORD WINAPI WlanOpenHandle( __in DWORD dwClientVersion, __re ...
- Class对象即反射
Class对象 当ClassLoader加载一个class文件到JVM的时候,会自动创建一个该类的Class对象,并且这个对象是唯一的,后续要创建这个类的任何实例,都会根据这个Class对象来创建.因 ...
- iOS 利用for循环创建九宫格
// 利用for循环创建九宫格 - (void)createScratchableLatex{ // 总列数 ; // 每一格的尺寸 CGFloat cellW = (self.frame.size. ...
- sql 多行合一行
sql多行合并成一行 sql server SELECT [activityId], --STUFF( (SELECT ',' + Cast(A.phone AS varchar) FROM aaa ...
- HDU 2295 Radar (重复覆盖)
Radar Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- search 搜索
hosts文件路径 C:/WINDOWS/system32/drivers/etc/hosts host tnsnames.ora文件路径 C:/oraclexe/app/oracle/product ...
- const用法小结
const与指针 char *const p --> char *(const p) --> 指针常量 char const *p --> char (const *p) --> ...
- dojo布局(layout)
使用BorderContainer和ContentPane实现布局 1.效果图如下: 2.HTML代码: <div id="appLayout" class="de ...
- java_jdk_JDK版本切换批处理脚本
我们平时在window上做开发的时候,可能需要同时开发两个甚至多个项目,有时不同的项目对JDK的版本要求有区别,这时候我们可能会在一台电脑上安装多个版本的JDK,如下图所示: