这里写自定义目录标题
Android的设计模式-观察者模式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;@Overridepublic void addObserver(Observer observer) {if (!observers.contains(observer)) {observers.add(observer);}}@Overridepublic void deleteObserver(Observer observer) {observers.remove(observer);}@Overridepublic 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;@Overridepublic 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 {@Overrideprotected 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("测试看我输出多少次……");}}}
结果