您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 > 

01 發布者訂閱者模式 java(設計模式-快餐簡解-【觀察者模式】)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-05-28 17:24:11【】9人已围观

简介java設計模式之觀察者模式(Observer)//SubjectjavapackageyoungmastermodelObserver;/***@authoryoungmaster*@Email:y

java 設計模式之 觀察者模式(Observer)

//Subject java

package youngmaster model Observer;

/

**

* @author youngmaster

* @E mail:young * @version myEclipse

* @create time 上午 : :

*/

/

**

* 察者模式屬于行為型模式 其意圖是定義對象間的一種一對多的依賴關系

* 當一個對象的狀態發生改變時 所有依賴于它的對象都得到通知并被自動更新

* 在制作系統的過程中 將一個系統分割成一系列相互協作的類有一個常見的副作用

* 需要維護相關對象間的一致性 我們不希望為了維持一致性而使各類緊密耦合

* 因為這樣降低了他們的可充用性 這一個模式的關鍵對象是目標(Subject)和觀察者(Observer)

* 一個目標可以有任意數目的依賴它的觀察者 一旦目標的狀態發生改變 所有的觀察者都得到通知

* 作為對這個通知的響應 每個觀察者都將查詢目標以使其狀態與目標的狀態同步 這種交互也稱為發布 訂閱模式

* 目標是通知的發布者 他發出通知時并不需要知道誰是他的觀察者 可以有任意數據的觀察者訂閱并接收通知

*/

/

**

* subject

*目標接口

*/

public interface Subject {

public void addObserver(Observer o);

public void deletObserver(Observer o);

public void notice();

}

//Observer java

package youngmaster model Observer;

/

**

* @author youngmaster

* @E mail:young * @version myEclipse

* @create time 上午 : :

*/

/

**

*觀察者接口

*/

public interface Observer {

public void update();

}

//Teacher java

package youngmaster model Observer;

import java util Vector;

/

**

* @author youngmaster

* @E mail:young * @version myEclipse

* @create time 上午 : :

*/

/

**

*目標接口實現

*/

public class Teacher implements Subject {

private String phone;

@SuppressWarnings( unchecked )

private Vector students;

@SuppressWarnings( unchecked )

public Teacher() {

phone = ;

students = new Vector();

}

@SuppressWarnings( unchecked )

@Override

public void addObserver(Observer o) {

students add(o);

}

@Override

public void deletObserver(Observer o) {

students remove(o);

}

@Override

public void notice() {

for (int i = ; i < students size(); i++) { ((Observer) students get(i)) update();

}

}

public void setPhone(String phone) {

this phone = phone;

notice();

}

public String getPhone() {

return phone;

}

}

//Student java

package youngmaster model Observer;

/

**

* @author youngmaster

* @E mail:young * @version myEclipse

* @create time 上午 : :

*/

/

**

*觀察者接口實現

*/

public class Student implements Observer {

private String name;

private String phone;

private Teacher teacher;

public Student(String name Teacher teacher) { this name = name; this teacher = teacher;

}

public void show() {

System out println( Name: + name + \nTeacher s phone: + phone);

}

@Override

public void update() {

phone = teacher getPhone();

}

}

//Client java

package youngmaster model Observer;

import java util Vector;

/

**

* @author youngmaster

* @E mail:young * @version myEclipse

* @create time 上午 : :

*/

/

**

*測試類

*/

public class Client {

/

**

* @param args

*/

@SuppressWarnings( unchecked )

public static void main(String[] args) {

Vector students = new Vector();

Teacher teacher = new Teacher();

for (int i = ; i < ; i++) {

Student student = new Student( student + i teacher); students add(student); teacher addObserver(student);

}

teacher setPhone( );

for (int i = ; i < ; i++)

((Student) students get(i)) show();

System out println( \n============================\n );

teacher setPhone( );

for (int i = ; i < ; i++)

((Student) students get(i)) show();

}

lishixin/Article/program/Java/gj/201311/27566

觀察者模式(Observer Pattern)

觀察者模式又稱為發布訂閱模式。一個發布者對應多個訂閱者,一旦發布者的狀態發生改變時,訂閱者將收到訂閱事件。

先看看一個生活中的例子:

我們使用想瀏覽Java相關的文章,于是我們點擊訂閱了[Java專題],當[Java專題]有新文章發布就會推送給我們,當然其他人也可以訂閱[Java專題]并收到[Java專題]的推送。這就是觀察者。 定義對象間的一對多關系,當一個對象的狀態發生變化時,所依賴于它的對象都得到通知并主動更新。在觀察者模式中,多個訂閱者成為觀察者(Observer),被觀察的對象成為目標(Subject)。

實現觀察者模式的方法不只一種,但是以包含Subject與Observer接口的類設計的做法最常見。(Java API 內置觀察者模式用的是Observer接口與Observable類)

觀察者模式UML圖:

先定義觀察者模式的接口

在觀察者模式的實現上,有推模式和拉模式兩種方式。

上面例子中

void updateByPush(Object obj) 就是推模式;

void updateByPull(Subject subject)就是拉模式

java.util包內包含最基本的Observer接口與Observable類(其實對應的就是Subject類)

我們看一下Obs

很赞哦!(746)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款的名片

职业:程序员,设计师

现居:湖北黄冈黄梅县

工作室:小组

Email:[email protected]