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

01 java 訂閱者模式(java設計模式-回調、事件監聽器、觀察者模式)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-05-18 11:05:59【】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

有哪些JAVA設計模式呢?

1、FACTORY?追MM少不了請吃飯了,麥當勞的雞翅和肯德基的雞翅都是MM愛吃的東西,雖然口味有所不同,但不管你帶MM去麥當勞或肯德基,只管向服務員說“來四個雞翅”就行了。麥當勞和肯德基就是生產雞翅的Factory 工廠模式:客戶類和工廠類分開。消費者任何時候需要某種產品,只需向工廠請求即可。消費者無須修改就可以接納新產品。缺點是當產品修改時,工廠類也要做相應的修改。如:如何創建及如何向客戶端提供。

2、BUILDER?MM最愛聽的就是“我愛你”這句話了,見到不同地方的MM,要能夠用她們的方言跟她說這句話哦,我有一個多種語言翻譯機,上面每種語言都有一個按鍵,見到MM我只要按對應的鍵,它就能夠用相應的語言說出“我愛你”這句話了,國外的MM也可以輕松搞掂,這就是我的“我愛你”builder。(這一定比美軍在伊拉克用的翻譯機好賣) 建造模式:將產品的內部表象和產品的生成過程分割開來,從而使一個建造過程生成具有不同的內部表象的產品對象。建造模式使得產品內部表象可以獨立的變化,客戶不必知道產品內部組成的細節。建造模式可以強制實行一種分步驟進行的建造過程。

3、FACTORY METHOD?請MM去麥當勞吃漢堡,不同的MM有不同的口味,要每個都記住是一件煩人的事情,我一般采用Factory Method模式,帶著MM到服務員那兒,說“要一個漢堡”,具體要什么樣的漢堡呢,讓MM直接跟服務員說就行了。 工廠方法模式:核心工廠類不再負責所

很赞哦!(2)

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

职业:程序员,设计师

现居:安徽合肥庐阳区

工作室:小组

Email:[email protected]