IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

大话设计模式之观察者模式

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

观察者模式

  定义了一种一对多的依赖关系,让多个观察者对象去监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。

下面通过代码去探索观察者模式的奥秘:

通过面向对象的思想去创建观察者模式
创建一个接口  定义被观察着的动作
public interface Subject {

    /*增加观察者*/
    public void add(Observer observer);

    /*删除观察者*/
    public void del(Observer observer);

    /*通知所有的观察者*/
    public void notifyObservers();

    /*自身的操作*/
    public void operation();

} 
定义一个观察者共同的动作接口
public interface Observer {
    public abstract void update();
}

创建第一个观察者实现上面接口
public class Observer1 implements Observer {
    @Override
    public void update() {
        System.out.println("observer1 has received!");
    }
}
创建第二个观察者实现上面接口
public class Observer2 implements Observer {
    @Override
    public void update() {
        System.out.println("observer2 has received!");
    }
}

创建抽象类实现上述被观察者的动作接口;重写里面的方法, 新增观察者、删除观察者、通知所有观察者
public abstract class AbstractSubject implements Subject {

    private Vector<Observer> vector = new Vector<Observer>();

    @Override
    public void add(Observer observer) {
        vector.add(observer);
    }

    @Override
    public void del(Observer observer) {
        vector.remove(observer);
    }

    @Override
    public void notifyObservers() {
        Enumeration<Observer> enumo = vector.elements();
        while(enumo.hasMoreElements()){
            enumo.nextElement().update();
        }
    }

}

现在创建被观察者,通过改变自身的状态来通知所有观察者
public class MySubject extends AbstractSubject {

    @Override
    public void operation() {
        System.out.println("update self!");
        notifyObservers();
    }

}

 通过main方法测试看看效果

public class MainTest {

    public static void main(String[] args) {
        Subject sub = new MySubject();
        sub.add(new Observer1());
        sub.add(new Observer2());

        sub.operation();
    }

}

//输出结果
update self!
observer1 has received!
observer2 has received! 

接下来解读下上述代码:

  观察者模式的关键对象是主题subject和观察者Observer,一个subject可以有任意数目的依赖他的Observer,一旦subject发生改变,所有的observer都能得到通知,subject发出通知时并不需要知道谁是他的观察者。而任何一个具体观察者也不需要知道其他观察者的存在。

当我们什么情况下使用观察者模式呢?

  当一个对象的改变需要同时改变其他对象的时候。

总体来说观察者模式所做的工作就是解除耦合。让耦合的双方都依赖于抽象,而不是依赖于具体。从而使各自的变化都不会影响另一边的变化。

到此lz探索的观察者模式就先告一段落,相信通过上述代码读者们在心中也理解了一些观察者模式的意义;

 

  

  

文章永久链接:https://tech.souyunku.com/?p=39902


Warning: A non-numeric value encountered in /data/wangzhan/tech.souyunku.com.wp/wp-content/themes/dux/functions-theme.php on line 1154
赞(72) 打赏



未经允许不得转载:搜云库技术团队 » 大话设计模式之观察者模式

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码
IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

评论 抢沙发

大前端WP主题 更专业 更方便

联系我们联系我们

觉得文章有用就打赏一下文章作者

微信扫一扫打赏

微信扫一扫打赏


Fatal error: Uncaught Exception: Cache directory not writable. Comet Cache needs this directory please: `/data/wangzhan/tech.souyunku.com.wp/wp-content/cache/comet-cache/cache/https/tech-souyunku-com/index.q`. Set permissions to `755` or higher; `777` might be needed in some cases. in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php:367 Stack trace: #0 [internal function]: WebSharks\CometCache\Classes\AdvancedCache->outputBufferCallbackHandler() #1 /data/wangzhan/tech.souyunku.com.wp/wp-includes/functions.php(5109): ob_end_flush() #2 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(303): wp_ob_end_flush_all() #3 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(327): WP_Hook->apply_filters() #4 /data/wangzhan/tech.souyunku.com.wp/wp-includes/plugin.php(470): WP_Hook->do_action() #5 /data/wangzhan/tech.souyunku.com.wp/wp-includes/load.php(1097): do_action() #6 [internal function]: shutdown_action_hook() #7 {main} thrown in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php on line 367