当前位置: 移动技术网 > IT编程>软件设计>设计模式 > 设计模式介绍(什么是观察者模式)

设计模式介绍(什么是观察者模式)

2020年09月29日  | 移动技术网IT编程  | 我要评论
设计模式-观察者什么是观察者模式?版本1-初版:版本2-初版修改:版本3-JDK版:(jdk版本增加了多线程处理,实现了线程安全)什么是观察者模式?自我总结:被观察者状态改变时通知观察者代码举例版本1-初版:1、定义被观察者(被观察者集合泛型为观察者)2、定义观察者3、执行通知//1、定义被观察者public class MyObservable { //观察者用List存储,方便统一通知 List<MyObserver> observerList = ne



什么是观察者模式?

自我总结:被观察者状态改变时通知观察者

代码举例

版本1-初版:

1、定义被观察者(被观察者集合泛型为观察者)内置3个方法 增、删、通知
2、定义观察者
3、执行通知

//1、定义被观察者
public class MyObservable { //观察者用List存储,方便统一通知
    List<MyObserver> observerList = new ArrayList(); //添加
    public void add(MyObserver observer) { observerList.add(observer); } //移除
    public void remove(MyObserver observer) { observerList.remove(observer); } public void notifyObservers() { //增强for,逐个通知 for (MyObserver obs : observerList) { obs.update(); } } } 
//2、定义观察者
public class MyObserver { public void update() { Log.i("Observer", "收到通知"); } } 
//3、执行通知
public class NotifyActivity extends Activity{ @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //创建被观察者
        MyObservable observable = new MyObservable(); //创建观察者
        MyObserver observerA = new MyObserver(); MyObserver observerB = new MyObserver(); //添加
        observable.add(observerA); observable.add(observerB); //移除
        observable.remove(observerA); //通知
        observable.notifyObservers(); } } 

版本2-通用版本:

1、定义被观察者接口
2、定义被观察者
3、定义观察者接口
4、定义观察者
5、执行通知

//1、定义被观察者接口
interface InterfaceMyObservable { //添加观察者
    void addMyObserver(InterfaceMyObserver interfaceMyObserver); //移除观察者
    void removeMyObserver(InterfaceMyObserver interfaceMyObserver); //通知观察者
    void notifyMyObservers(); } 
//2、定义被观察者
public class MyObservable implements InterfaceMyObservable { //集合
    List<InterfaceMyObserver> list = new ArrayList<>(); //添加观察者
    @Override
    public void addMyObserver(InterfaceMyObserver interfaceMyObserver) { list.add(interfaceMyObserver); } //移除观察者
    @Override
    public void removeMyObserver(InterfaceMyObserver interfaceMyObserver) { list.remove(interfaceMyObserver); } @Override
    public void notifyMyObservers() { //增强for,通知观察者 for (InterfaceMyObserver obs : list) { obs.upDate(); } } } 

/

/3、定义观察者接口
interface InterfaceMyObserver { void upDate(); } 
//4、定义观察者
public class MyObserver implements InterfaceMyObserver { @Override
    public void upDate() { Log.i("tag", "收到通知"); } } 
//5、通知观察者
public class Notify { public static void main(String[] args) { //创建被观察者
        MyObservable myObservable = new MyObservable(); //创建观察者
        MyObserver myObserver = new MyObserver(); MyObserver myObserverA = new MyObserver(); //将观察者添入集合
        myObservable.addMyObserver(myObserver); myObservable.addMyObserver(myObserverA); //通知观察者
        myObservable.notifyMyObservers(); } } 

版本3-JDK版:(jdk版本增加了多线程处理,实现了线程安全)

1、定义被观察者
2、定义观察者
3、执行通知

//1、定义被观察者
public class JdkObervable extends Observable { public void perfrom(String notify) { //当changed属性为true时才更行观察者
        this.setChanged(); //this.clearChanged(); this.notifyObservers(notify); } } 
//2、定义观察者
public class JdkObserver implements Observer { @Override
    public void update(Observable o, Object arg) { String argu = (String) arg; Log.i("tag", argu); } } 
//3、执行通知
public class JdkNotify { public static void main(String[] args) { //创建被观察者
        JdkObervable jdkObervable = new JdkObervable(); JdkObserver jdkObserverA = new JdkObserver(); JdkObserver jdkObserverB = new JdkObserver(); //添加
        jdkObervable.addObserver(jdkObserverA); jdkObervable.addObserver(jdkObserverB); //移除
        jdkObervable.deleteObserver(jdkObserverA); //通知观察者
        jdkObervable.perfrom("通知"); } } 

本文地址:https://blog.csdn.net/android123ios/article/details/108860821

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网