Android常用设计模式--观察者模式

观察者模式常用于只要改变一个内容,其他的一个或多个内容也会随之改变。
例如需求:公司行政通知开会,领导需要准备发言,秘术做好会议记录,员工需要认真听讲。
这种需求使用观察者模式实现最合理。
观察者模式实现有两种方式,
方式一、使用Api直接提供的接口,我们只要实现它即可。
方式二、自定义一个观察者接口、被观察着接口、被观察者主体、观察者主体。

方式一简单代码实现:
1、定义被观察者类,继承Observable
需要观察的对象

public class MeetingObservable extends Observable {

    public void startMeeting(String  msg){
        setChanged();
        notifyObservers(msg);
    }
}

2、定义观察者类,实现Observer接口
当需要观察的对象发生改变是,观察者需要作出的变化。

public class SecretaryObserver implements Observer {

    @Override
    public void update(Observable observable, Object o) {
        Log.d("Secretary","接收到会议指令 "+o.toString() + " 秘术记录会议内容");
    }
}

public class LeadObserver implements Observer {

    @Override
    public void update(Observable observable, Object o) {
        Log.d("Lead",o.toString() + " 领导发言 ");
    }
}

public class EmployeeObserver implements Observer {

    @Override
    public void update(Observable observable, Object o) {
        Log.d("Employee",o.toString() + " 员工听讲");
    }
}

3、使用方法

private void test(){
        MeetingObservable observable = new MeetingObservable();

        SecretaryObserver secretary = new SecretaryObserver();
        LeadObserver lead = new LeadObserver();
        EmployeeObserver employee = new EmployeeObserver();

        observable.addObserver(secretary);
        observable.addObserver(lead);
        observable.addObserver(employee);

        observable.startMeeting("开始会议");
    }
  • 当退出的时候必须调用 observable.deleteObservers() 取消观察者

方式二简单实现
1、定义观察者接口
用来更新观察者对象

public interface MyObserver {

    public void upDate(Object object);

}

2、定义被观察者接口

public interface MyObservable {

    public void addObserver(MyObserver observer);

    public void delObserver(MyObserver observer);

    public void delObservers();

    public void notifyObserver(Object object);

}

3、定义被观察者主体
该方法主要用于添加、删除观察者,以及通知各个观察者进行更新。

public class Meeting implements MyObservable{

    List<MyObserver> mList = new ArrayList<>();

    @Override
    public void addObserver(MyObserver observer) {
        if (observer != null){
            mList.add(observer);
        }
    }

    @Override
    public void delObserver(MyObserver observer) {
        if (observer != null){
            mList.remove(observer);
        }
    }

    @Override
    public void delObservers() {
        if (mList != null && mList.size() > 0){
            mList.clear();
        }
    }

    @Override
    public void notifyObserver(Object object) {
        for (MyObserver observer : mList){
            observer.upDate(object);
        }
    }
}

4、定义观察者主体
实现观察者接口,实现各个观察者接收到通知消息后需要进行的操作。

public class Employee implements MyObserver {
    @Override
    public void upDate(Object object) {
        Log.d("employee", object.toString() + " 各位员工注意听讲");
    }
}

public class Manager implements MyObserver {
    @Override
    public void upDate(Object object) {
        Log.d("manager", object.toString() + " 领导讲话 ");
    }
}

5、使用方法

private void test(){
        Meeting meeting = new Meeting();

        Manager manager = new Manager();
        Employee employee = new Employee();

        meeting.addObserver(manager);
        meeting.addObserver(employee);

        meeting.notifyObserver("员工大会现在开始");
        
        //使用完毕之后需要消除观察者
        meeting.delObservers();
    }

你可能感兴趣的:(设计模式,android)