第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

【設(shè)計模式】觀察者模式

標簽:
Java

观察者模式(Observer Pattern)


定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。
观察者模式又叫做发布-订阅(Publish/Subscribe)模式等。


优点:
1.数据逻辑层和表现层分离,定义了稳定的消息更新传递机制;
2.在观察者和观察目标之间建立一个抽象的耦合;
3.支持广播通信,简化一对多系统设计;
4.符合"开闭原则"。


缺点:
1.通知对象多时,会消耗一定的时间;
2.观察者和观察目标有循环依赖时,可能导致系统奔溃;
3.不知道观察的目标是怎么样发生变化的。


UML图
图片描述


结构:
1.Subject(目标)
又称为主题,它是指被观察的对象。它提供一个接口来增加或者删除一个观察者对象。目标类可以是接口,也可以是抽象类或者实现类。

2.ConcreteSubject(具体目标)
具体目标是目标类的子类,通常包含经常发生改变的数据,同时实现了在目标类中定义的抽象业务逻辑方法。

3.Oberver(观察者)
观察者将对观察目标的改变做出反应,观察者一般定义为接口。

4.ConcerteObserver(具体观察者)
在具体观察者中维护一个指向具体目标对象的引用,它存储具体观察者的有关状态。


例子 猫、狗与老鼠
1.AnimalSubject

package observer_23_1;

import java.util.ArrayList;

/**
 * 动物抽象目标类
 */
public abstract class AnimalSubject
{
    protected ArrayList<AnimalObserver> observers = new ArrayList<AnimalObserver>();
    /**
     * 注册监听
     * @param observer
     */
    public void attach(AnimalObserver observer)
    {
        observers.add(observer);
    }
    /**
     * 注销监听
     * @param observer
     */
    public void detach(AnimalObserver observer)
    {
        observers.remove(observer);
    }

}

2.AnimalObserver

package observer_23_1;
/**
 * 动物观察者接口
 */
public interface AnimalObserver
{
    /**
     * 回应
     */
    void response();
}

3.Cat

package observer_23_1;
/**
 * 猫类
 */
public class Cat extends AnimalSubject
{
    public void cry()
    {
        System.out.println("猫叫!");
        System.out.println("-------------------------");
        //通知其他的观察者
        for(AnimalObserver observer : observers)
        {
            observer.response();
        }
    }
}

4.Mouse

package observer_23_1;
/**
 * 老鼠类
 */
public class Mouse implements AnimalObserver
{

    @Override
    public void response()
    {
        System.out.println("老鼠努力逃跑!");
    }

}

5.Dog

package observer_23_1;
/**
 * 狗类
 */
public class Dog implements AnimalObserver
{

    @Override
    public void response()
    {
        System.out.println("狗也跟着叫");
    }

}

6.Test

package observer_23_1;
/**
 * 测试类
 */
public class Test
{

    public static void main(String[] args)
    {
        Cat subject = new Cat();
        AnimalObserver mouse = new Mouse();
        AnimalObserver dog = new Dog();

        subject.attach(mouse);
        subject.attach(dog);

        subject.cry();

    }

}

运行结果
图片描述


代码 http://114.215.186.20/14551100130/designPattern/observer_23_1.rar


點擊查看更多內(nèi)容
1人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
JAVA開發(fā)工程師
手記
粉絲
14
獲贊與收藏
93

關(guān)注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消