您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 >
01 發布者訂閱者模式 java(誰能介紹一下JAVA平臺開發中最長用的幾種設計模式~最好是通俗一些的并且有實例的~500分酬謝)
Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-05-28 09:38:56【】8人已围观
简介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
很赞哦!(4)
相关文章
- 01 上海對外貿易大學金融專碩學費(對外經濟貿易大學金融專碩分數線)
- 01 上海對外貿易學院英文名(求上海華東政法大學的地址...)
- 01 上海對外經貿金融學碩學費(請問金融專碩的學費現在大都多少錢一年,學碩的呢?)
- 02 廣外外語外貿大學國際班(廣東外語外貿大學有幾個校區)
- 02 廣東對外貿易源遠流長被譽為(廣州被譽為海上絲綢發源地被譽為)
- 01 上海封外經貿大學研究生(2016年上國會,上海大學,上海外經貿mpacc選哪所大學)
- 01 上海對外貿易大學是985還是211啊(上海對外經貿大學是211還是985大學)
- 02 廣東粵鈞億貿易有限公司(用用友nc的乙方有哪些公司)
- 01 上海對外貿易大學四川錄取分數線(四川985 211最低錄取成績)
- 01 上海對外貿易大學研究生(上海對外經貿大學怎么樣,研究生好考嗎)
Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款的名片
职业:程序员,设计师
现居:辽宁铁岭调兵山市
工作室:小组
Email:[email protected]
热门文章
站长推荐
02 廣東高速違法舉報買粉絲(買粉絲e高速買粉絲先辦理后填寫信息去哪里找)
02 廣東財經大學國際經濟與貿易專業好考公務員嗎(二本的最好學校,最好專業)
01 上海對外經貿研究生學費(讀上海對外經貿非全日制研究生有哪些費用)
02 廣名盛進出口貿易有限公司(請問英文高手“威海邦聯進出口有限公司”正確翻譯是“WEIHAI BONGLIN IMP.& EXP.CO.,LTD”嗎?先謝了!)
02 廣東禁毒買粉絲買粉絲二維碼(有哪些故事因生活困苦但卻積極向上?)
01 上海對外貿易大學金融專碩調劑(金融考研)
02 廣東海洋大學國際經濟與貿易專業怎么樣(廣東海洋大學怎么樣廣東海洋大學介紹)
01 上海對外貿易大學山東錄取分數線(2010年各名牌大學在山東的錄取分數線)