这里写自定义目录标题
Android的设计模式-观察者模式
观察者接口
package com.zll.test;
public interface Observer{
void update(String message);
}
被观察者接口
package com.zll.test;
//目标对象接口
public interface Observable
{
// 注册观察者
void addObserver(Observer observer);
// 删除观察者
void deleteObserver(Observer observer);
// 通知观察者
void notifyObservers();
}
被观察者实现
package com.zll.test;
import android.util.Log;
import java.util.concurrent.CopyOnWriteArraySet;
public class ObservableImpl implements Observable {
private final CopyOnWriteArraySet<Observer> observers = new CopyOnWriteArraySet<>();
private String message;
@Override
public void addObserver(Observer observer) {
if (!observers.contains(observer)) {
observers.add(observer);
}
}
@Override
public void deleteObserver(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
Log.i("ceshi","update="+message);
observer.update(message);
}
}
public void sendMessage(String message) {
this.message = message;
Log.i("ceshi",message+"");
notifyObservers();
}
}
观察者实现
package com.zll.test;
import android.util.Log;
public class ObserverImpl implements Observer {
public String playerName;
@Override
public void update(String message) {
Log.i("ceshi","DotaPlayer-" + playerName + "接收到信息:" + message);
}
}
调用
package com.zll.test;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ObserverImpl playerA = new ObserverImpl();
playerA.playerName = "甲";
ObservableImpl messageCenter = new ObservableImpl();
messageCenter.addObserver(playerA);
for(int i=0;i<10;i++) {
messageCenter.sendMessage("测试看我输出多少次……");
}
}
}
结果