設計模式(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 !