1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      觀察者模式j(luò)ava代碼 java 觀察者模式 流程審批

      JAVA觀察者模式(observer pattern)

      import?java.util.ArrayList;

      成都創(chuàng)新互聯(lián)從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務公司,擁有項目成都做網(wǎng)站、網(wǎng)站設(shè)計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元普蘭做網(wǎng)站,已為上家服務,為普蘭各地企業(yè)和個人服務,聯(lián)系電話:18980820575

      import?java.util.HashMap;

      import?java.util.Random;

      import?javax.swing.event.ChangeEvent;

      import?javax.swing.event.ChangeListener;

      public?class?StockLists?implements?Runnable

      {

      private?HashMapString,?Stock?????????????????????hmStocks?=?new?HashMapString,?Stock();

      private?HashMapString,?ArrayListChangeListener?hmCL?????=?new?HashMapString,?ArrayListChangeListener();

      public?StockLists()

      {

      init(100);

      new?Thread(this).start();

      }

      public?void?run()

      {

      Random?rand?=?new?Random();

      while?(true)

      {

      try

      {

      Thread.sleep(100);

      Stock?s?=?randStock();

      s.price?=?rand.nextFloat();

      ArrayListChangeListener?alCL?=?hmCL.get(s.symbol);

      if?(alCL?==?null)

      {

      continue;

      }

      for?(ChangeListener?cl?:?alCL)

      {

      cl.stateChanged(new?ChangeEvent(s));

      }

      }

      catch?(InterruptedException?e)

      {

      e.printStackTrace();

      }

      }

      }

      private?Stock?randStock()

      {

      Random?rand?=?new?Random();

      int?idx?=?rand.nextInt(hmStocks.size());

      String?sym?=?(String)?hmStocks.keySet().toArray()[idx];

      Stock?s?=?hmStocks.get(sym);

      return?s;

      }

      public?boolean?addChangeListener(ChangeListener?cl,?String?sym)

      {

      ArrayListChangeListener?al?=?hmCL.get(sym);

      if?(al?==?null)

      {

      al?=?new?ArrayListChangeListener();

      hmCL.put(sym,?al);

      }

      return?al.add(cl);

      }

      private?void?init(int?count)

      {

      Random?rand?=?new?Random();

      for?(int?i?=?0;?i??count;?i++)

      {

      String?sym?=?randSym(rand);

      float?p?=?rand.nextFloat();

      Stock?s?=?new?Stock(sym,?p);

      hmStocks.put(sym,?s);

      }

      }

      private?String?randSym(Random?rand)

      {

      char[]?ca?=?new?char[3];

      for?(int?i?=?0;?i??ca.length;?i++)

      {

      ca[i]?=?(char)?('A'?+?rand.nextInt(26));

      }

      return?new?String(ca);

      }

      public?static?void?main(String[]?args)

      {

      StockLists?sl?=?new?StockLists();

      sl.addChangeListener(new?Investor("111"),?sl.randStock().symbol);

      sl.addChangeListener(new?Investor("222"),?sl.randStock().symbol);

      sl.addChangeListener(new?Investor("333"),?sl.randStock().symbol);

      sl.addChangeListener(new?Investor("444"),?sl.randStock().symbol);

      sl.addChangeListener(new?Investor("555"),?sl.randStock().symbol);

      sl.addChangeListener(new?Investor("666"),?sl.randStock().symbol);

      sl.addChangeListener(new?Investor("777"),?sl.randStock().symbol);

      sl.addChangeListener(new?Investor("888"),?sl.randStock().symbol);

      sl.addChangeListener(new?Investor("999"),?sl.randStock().symbol);

      sl.addChangeListener(new?Investor("000"),?sl.randStock().symbol);

      }

      }

      class?Stock

      {

      public?String?symbol?=?null;

      public?float??price??=?0.0f;

      public?Stock(String?sym,?float?p)

      {

      symbol?=?sym;

      price?=?p;

      }

      public?String?toString()

      {

      return?symbol?+?":"?+?price;

      }

      }

      class?Investor?implements?ChangeListener

      {

      public?String?name?=?"";

      public?Investor(String?name)

      {

      this.name?=?name;

      }

      @Override

      public?void?stateChanged(ChangeEvent?e)

      {

      Stock?s?=?(Stock)?e.getSource();

      System.out.println("Hello,"?+?name?+?"?:?STOCK?CHANGED:?"?+?s);

      }

      }

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

      //Subject java

      package youngmaster model Observer;

      /**

      * @author youngmaster

      * @E mail:young * @version myEclipse

      * @create time 上午 : :

      */

      /**

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

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

      * 在制作系統(tǒng)的過程中 將一個系統(tǒng)分割成一系列相互協(xié)作的類有一個常見的副作用

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

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

      * 一個目標可以有任意數(shù)目的依賴它的觀察者 一旦目標的狀態(tài)發(fā)生改變 所有的觀察者都得到通知

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

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

      */

      /**

      * 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 上午 : :

      */

      /**

      *目標接口實現(xiàn)

      */

      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 上午 : :

      */

      /**

      *觀察者接口實現(xiàn)

      */

      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();

      }

      lishixinzhi/Article/program/Java/gj/201311/27566

      Java中使用觀察者模式實現(xiàn)自定義事件

      MyEventTest java:

      package wintys event;

      import javax swing event EventListenerList;

      import java util Date;

      import java text DateFormat;

      import java text SimpleDateFormat;

      /**

      * Java的事件機制/自定義事件

      運行結(jié)果:

      do something interesting in source here

      listener detects [event]:wintys event MyEvent[source=wintys event MySource@

      ] [occur at]: : :

      listener detects [event]:wintys event MyEvent[source=wintys event MySource@

      ] [occur at]: : :

      * @version

      * @author 天堂露珠 ()

      * @see

      */

      class MyEventTest{

      public static void main(String[] args){

      MySource source = new MySource();

      MyListener myListener = new MyListener(){

      public void doMyAction(MyEvent e){

      System out println( listener detects + e);

      }

      };

      source addMyListener(myListener);

      source addMyListener(myListener);

      source addMyListener(myListener);

      source removeMyListener(myListener);

      source doSomething();

      }

      }

      /**

      * 自定義的事件

      * @version

      * @author 天堂露珠()

      * @see

      */

      class MyEvent extends java util EventObject{

      private Date date;//記錄事件發(fā)生的時間

      public MyEvent(Object source Date date){

      super(source);

      this date = date;

      }

      public String toString(){

      DateFormat df = new SimpleDateFormat( yyyy MM dd HH:mm:ss );

      String dt = df format(date);

      return [event]: + super toString() + [occur at]: + dt;

      }

      }

      /**

      * 自定義事件監(jiān)聽器接口

      * @version

      * @author 天堂露珠()

      * @see

      */

      interface MyListener extends java util EventListener{

      void doMyAction(MyEvent e);

      }

      /**

      * 自定義事件源

      * @version

      * @author 天堂露珠()

      * @see

      */

      class MySource{

      /**

      * 保存注冊的監(jiān)聽器列表

      * 子類可以使用它保存自己的事件監(jiān)聽器(非MyListener監(jiān)聽器)列表

      */

      protected EventListenerList listenerList = new EventListenerList();

      private MyEvent myEvent = null;//fireDoMyAction()使用此變量

      /**

      * 沒有做任何事

      */

      public MySource(){

      }

      /**

      * 添加一個MyListener監(jiān)聽器

      */

      public void addMyListener(MyListener listener){

      listenerList add(MyListener class listener);

      }

      /**

      * 移除一個已注冊的MyListener監(jiān)聽器

      * 如果監(jiān)聽器列表中已有相同的監(jiān)聽器listener listener

      * 并且listener ==listener

      * 那么只移除最近注冊的一個監(jiān)聽器

      */

      public void removeMyListener(MyListener listener){

      listenerList remove(MyListener class listener);

      }

      /**

      * @return 在此對象上監(jiān)聽的所有MyListener類型的監(jiān)聽器

      */

      public MyListener[] getMyListeners(){

      return (MyListener[])listenerList getListeners(MyListener class);

      }

      //Winty:Copy directly from javax swing event EventListenerList

      /*Notify all listeners that have registered interest for

      notification on this event type The event instance

      is lazily created using the parameters passed into

      the fire method

      */

      protected void fireDoMyAction() {

      // getListenerList() Guaranteed to return a non null array

      Object[] listeners = listenerList getListenerList();

      // Process the listeners last to first notifying

      // those that are interested in this event

      for (int i = listeners length ; i= ; i = ) {

      if (listeners[i]==MyListener class) {

      // Lazily create the event:

      if (myEvent == null)

      myEvent = new MyEvent(this new Date());

      ((MyListener)listeners[i+ ]) doMyAction(myEvent);

      }

      }

      }

      /**

      * 做一些事件源應該做的有意義的事 然后通知監(jiān)聽器

      * 這里只是一個示例方法

      * 例如:MySource如果是一個按鈕 則doSomething()就可以命名為click()

      * 當用戶點擊按鈕時調(diào)用click()方法

      */

      public void doSomething() {

      System out println( do something interesting here );

      fireDoMyAction();//通知監(jiān)聽器

      }

      }

      lishixinzhi/Article/program/Java/hx/201311/26237


      新聞名稱:觀察者模式j(luò)ava代碼 java 觀察者模式 流程審批
      標題URL:http://www.ef60e0e.cn/article/dosecic.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        宾阳县| 开封市| 吴桥县| 射阳县| 车险| 西贡区| 漯河市| 本溪市| 神木县| 哈巴河县| 曲周县| 马鞍山市| 延长县| 恩施市| 阳谷县| 房产| 安阳县| 鄢陵县| 新疆| 吐鲁番市| 阳江市| 曲沃县| 台东县| 历史| 昌吉市| 杂多县| 泰安市| 东光县| 文化| 赤水市| 北碚区| 东阳市| 陕西省| 林西县| 涟水县| 玉山县| 壶关县| 嘉义市| 平顶山市| 芜湖县| 德江县|