设计模式 观察者模式 以Android中TextView文本内容发生变化为背景
Posted zhangjiaofa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式 观察者模式 以Android中TextView文本内容发生变化为背景相关的知识,希望对你有一定的参考价值。
先来看看观察者模式的定义:
定义了对象之间的一对多的依赖,这样一来,当一个对象改变时,它的所有的依赖者都会收到通知并自动更新。
好了,对于定义的理解总是需要实例来解析的,如今的微信服务号相当火啊,下面就以微信服务号为背景,给大家介绍观察者模式。
看一张图:
其中每个使用者都有上图中的3条线,为了使图片清晰省略了。
如上图所示,服务号就是我们的主题,使用者就是观察者。现在我们明确下功能:
1、服务号就是主题,业务就是推送消息
2、观察者只需要订阅主题,只要有新的消息就会送来
3、当不想要此主题消息时,取消订阅
4、只要服务号还在,就会一直有人订阅
好了,现在我们来看看观察者模式的类图:
接下来以android中的TextView文本发生变化的消息的订阅与发布为例子
首先开始写我们的主题接口,和观察者接口:
1、主题接口:
package com.zhangjiaofa.textviewlistenerdemo;
public interface Subject
public void registerObserver(Observer observer);
public void removeObserver(Observer observer);
public void notifyObservers();
package com.zhangjiaofa.textviewlistenerdemo;
public interface Observer
public void update(String description);
接下来文本标签发生变化,消息发布控制器的的实现类:
package com.zhangjiaofa.textviewlistenerdemo;
import java.util.ArrayList;
import java.util.List;
import android.widget.TextView;
public class ObserverForTextView implements Subject
private TextView mTextView = null;
private List<Observer> mObserverList = new ArrayList<Observer>();
public ObserverForTextView(TextView textView)
mTextView = textView;
@Override
public void registerObserver(Observer observer)
mObserverList.add(observer);
@Override
public void removeObserver(Observer observer)
int index = mObserverList.indexOf(observer);
if (index >= 0)
mObserverList.remove(index);
@Override
public void notifyObservers()
for (Observer observer : mObserverList)
observer.update(mTextView.getText().toString());
public void comeInNewMessage(String message)
mTextView.setText(message);
notifyObservers();
最后,一个实现订阅接口的实体类:
package com.zhangjiaofa.textviewlistenerdemo;
import android.util.Log;
public class ObserverA implements Observer
private Subject mSubject = null;
public ObserverA(Subject subject)
mSubject = subject;
mSubject.registerObserver(this);
@Override
public void update(String description)
Log.v("jfzhang2", "reveive new message : " + description);
在MainActivity中测试如下:
package com.zhangjiaofa.textviewstrategydemo;
import com.zhangjiaofa.textviewlistenerdemo.ObserverA;
import com.zhangjiaofa.textviewlistenerdemo.ObserverForTextView;
import android.os.Bundle;
import android.app.Activity;
import android.widget.TextView;
public class MainActivity extends Activity
private TextView mTextView = null;
private ObserverForTextView mObserverForTextView = null;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.test);
mObserverForTextView = new ObserverForTextView(mTextView);
new ObserverA(mObserverForTextView);
mObserverForTextView.comeInNewMessage("Hello World");
可以看出:当给文本标签设置了新的文本内容的时候,凡是订阅了此类消息的实体类对象,均能够收到消息的回调。
以上是关于设计模式 观察者模式 以Android中TextView文本内容发生变化为背景的主要内容,如果未能解决你的问题,请参考以下文章