国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

java 設計模式之Observer

瀏覽:52日期:2024-06-27 14:25:26
內容: Java深入到一定程度,就不可避免的碰到設計模式(design pattern)這一概念,了解設計模式,將使自己對java中的接口或抽象類應用有更深的理解.設計模式在java的中型系統中應用廣泛,遵循一定的編程模式,才能使自己的代碼便于理解,易于交流,Observer(觀察者)模式是比較常用的一個模式,尤其在界面設計中應用廣泛,而本站所關注的是Java在電子商務系統中應用,因此想從電子商務實例中分析Observer的應用.雖然網上商店形式多樣,每個站點有自己的特色,但也有其一般的共性,單就'商品的變化,以便及時通知訂戶'這一點,是很多網上商店共有的模式,這一模式類似Observer patern.具體的說,如果網上商店中商品在名稱 價格等方面有變化,如果系統能自動通知會員,將是網上商店區別傳統商店的一大特色.這就需要在商品product中加入Observer這樣角色,以便product細節發生變化時,Observer能自動觀察到這種變化,并能進行及時的update或notify動作. IMG http://www.jdon.com/designpatterns/images/observer1.jpg[/IMG]Java的API還為為我們提供現成的Observer接口Java.util.Observer.我們只要直接使用它就可以.我們必須extends Java.util.Observer才能真正使用它:1.提供Add/Delete observer的方法;2.提供通知(notisfy) 所有observer的方法;//產品類 可供Jsp直接使用UseBean調用 該類主要執行產品數據庫插入 更新public class product extends Observable{ private String name;private float price;public String getName(){ return name;}public void setName(){ this.name=name;//設置變化點 setChanged(); notifyObservers(name);} public float getPrice(){ return price;}public void setPrice(){ this.price=price;//設置變化點 setChanged(); notifyObservers(new Float(price)); }//以下可以是數據庫更新 插入命令.public void saveToDb(){.....................} 我們注意到,在product類中 的setXXX方法中,我們設置了 notify(通知)方法, 當Jsp表單調用setXXX(如何調用見我的另外一篇文章),實際上就觸發了notisfyObservers方法,這將通知相應觀察者應該采取行動了.下面看看這些觀察者的代碼,他們究竟采取了什么行動://觀察者NameObserver主要用來對產品名稱(name)進行觀察的public class NameObserver implements Observer{private String name=null;public void update(Observable obj,Object arg){if (arg instanceof String){ name=(String)arg; //產品名稱改變值在name中 System.out.println('NameObserver :name changet to '+name);}}}//觀察者PriceObserver主要用來對產品價格(price)進行觀察的public class PriceObserver implements Observer{private float price=0;public void update(Observable obj,Object arg){if (arg instanceof Float){ price=((Float)arg).floatValue(); System.out.println('PriceObserver :price changet to '+price);}}} Jsp中我們可以來正式執行這段觀察者程序:<%if (request.getParameter('save')!=null){ product.saveToDb();out.println('產品數據變動 保存! 并已經自動通知客戶'); }else{//加入觀察者product.addObserver(nameobs);product.addObserver(priceobs);%>//request.getRequestURI()是產生本jsp的程序名,就是自己調用自己<form action='<%=request.getRequestURI()%>' method=post><input type=hidden name='save' value='1'>產品名稱:<input type=text name='name' >產品價格:<input type=text name='price'><input type=submit></form><%} %> 執行改Jsp程序,會出現一個表單錄入界面, 需要輸入產品名稱 產品價格, 點按Submit后,還是執行該jsp的if (request.getParameter('save')!=null)之間的代碼.由于這里使用了數據javabeans的自動賦值概念,實際程序自動執行了setName setPrice語句.你會在服務器控制臺中發現下面信息::NameObserver :name changet to ?????(Jsp表單中輸入的產品名稱)PriceObserver :price changet to ???(Jsp表單中輸入的產品價格);這說明觀察者已經在行動了.!!同時你會在執行jsp的瀏覽器端得到信息:產品數據變動 保存! 并已經自動通知客戶 上文由于使用jsp概念,隱含很多自動動作,現將調用觀察者的Java代碼寫如下: public class Test {public static void main(String args[]){Product product=new Product();NameObserver nameobs=new NameObserver();PriceObserver priceobs=new PriceObserver();//加入觀察者product.addObserver(nameobs);product.addObserver(priceobs);product.setName('橘子紅了');product.setPrice(9.22f); }} 你會在發現下面信息::NameObserver :name changet to 橘子紅了PriceObserver :price changet to 9.22這說明觀察者在行動了.!! Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
標簽: Java
相關文章:
主站蜘蛛池模板: 伊人久久在线视频 | 亚洲成a人| 国内精品久久久久久久久蜜桃 | 亚洲在线视频免费 | 国产成人精品午夜在线播放 | 午夜两性视频 | 成人在线观看午夜 | 波多野结衣aⅴ在线 | 日韩最新中文字幕 | 九九热视频精品 | 成人影院久久久久久影院 | 亚洲精品成人在线 | 点击进入不卡毛片免费观看 | 国产视频网站在线观看 | 在线视频亚洲欧美 | 国产黄色三级三级三级 | 午夜两性视频免费看 | 依人九九 | 日韩精品特黄毛片免费看 | 狠狠色丁香婷婷久久综合不卡 | 久久er热视频在这里精品 | 在线天天干 | 国产男女交性视频播放免费bd | 乱淫67194| 99草精品视频 | 牛人国产偷窥女洗浴在线观看 | 怡红院免费全部视频在线 | 在线有码| 久久免费国产视频 | 国产高清一区二区三区视频 | 在线播放成人毛片免费视 | 一级特黄欧美 | 久久99久久精品免费思思 | 欧美一级成人免费大片 | 曰本aaaaa毛片午夜网站 | 国产亚洲精品一区二区久久 | 在线播放另类 | 美女扒开腿让男生桶爽网站 | 香港三级日本三级人妇三级四 | 国产精品热久久毛片 | 久草男人天堂 |