設計模式(Design Pattern) - 行爲型模式(Behavioral Pattern) - 觀察者模式(Observer) - Java實現

設計模式(Design Pattern) - 行爲型模式(Behavioral Pattern) - 觀察者模式(Observer)
1、當一個對象(被觀察)變化時,其它關聯對象(觀察者)都會隨着變化!
2、關聯關係:一對多;(一是被觀察對象,多是觀察者)

一、說明:
1、Observer 觀察者(接口);
2、Guardian 觀察者.實現類;
3、Watched 被觀察(接口);
4、AbstractWatched 被觀察對象(抽象類);
5、Baby 被觀察對象.實現類。

二、Java實現,代碼如下:
1、Observer

package com.designPattern.observer;

/**
 * 觀察者
 *
 */
public interface Observer {

    /**
     * 觀察者 - 操作
     */
    public void action();

}

2、Guardian

package com.designPatterns.observer;

/**
 * 觀察者 - 實現類
 *
 */
public class Guardian implements Observer {

    private String name;

    public Guardian(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void action() {
        System.out.println(name + " : I'm coming !");
    }

}

3、Watched

package com.designPattern.observer;

/**
 * 被觀察 - 接口
 *
 */
public interface Watched {

    /**
     * 添加觀察者
     * @param entity 觀察者
     */
    public void addObserver(Observer entity);

    /**刪除觀察者
     * @param entity 觀察者
     */
    public void delObserver(Observer entity);

    /**
     * 通知觀察者
     */
    public void notifyObserver();

    /**
     * 被觀察對象的操作
     */
    public void operate();

}

4、AbstractWatched

package com.designPattern.observer;

import java.util.ArrayList;
import java.util.List;

/**
 * 被觀察 - 抽象類
 *
 */
public abstract class AbstractWatched implements Watched {

    // 觀察者列表
    List<Observer> list = new ArrayList<>();

    @Override
    public void addObserver(Observer entity) {
        list.add(entity);
    }

    @Override
    public void delObserver(Observer entity) {
        list.remove(entity);
    }

    @Override
    public void notifyObserver() {
        for (Observer entity : list) {
            entity.action();
        }
    }

}

5、Baby

package com.designPatterns.observer;

/**
 * 被觀察 - 實現類
 *
 */
public class Baby extends AbstractWatched {

    private String name;

    public Baby(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void operate() {
        System.out.println(name + " : Cry!");
        notifyObserver();
    }

}

6、Test

package com.designPattern.observer;

/**
 * 測試類
 *
 */
public class Test {

    public static void main(String[] args) {
        Baby baby = new Baby("baby");
        Guardian father = new Guardian("father");
        Guardian mother = new Guardian("mother");
        Guardian grandfather = new Guardian("grandfather");
        Guardian grandmother = new Guardian("grandmother");

        baby.addObserver(father);
        baby.addObserver(mother);
        baby.addObserver(grandfather);
        baby.addObserver(grandmother);

        baby.operate();
    }

}

7、輸出:
baby : Cry!
father : I’m coming !
mother : I’m coming !
grandfather : I’m coming !
grandmother : I’m coming !

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章