<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 觀察者模式 定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知所有觀察者對象,使它們能夠自動更新自己。(摘抄) 觀察者模式可以大大的降低類與類之間的耦合,同時又能保持一些對象改變的一致性。 觀察者模式把相互調用的類,抽象成了兩個部分,它們之間互不干擾,可以各自獨立的改變和使用,其中一個部分依賴于另一個部分的抽象,當一個部分改變時,可以通知另一個部分及時發生改變。 ~~~ import java.util.ArrayList; abstract class Subject { private ArrayList<Observer> list = new ArrayList<Observer>(); private String subjectState; public void Attach(Observer observer) { } public void Detach(Observer observer) { } public void Notify() { for (Observer o : list) { o.update(); } } } interface Observer { void update(); } class ConcreteSubject1 extends Subject { public void Notify() { System.out.println("abcd"); } } class ConcreteSubject2 extends Subject { public void Notify() { System.out.println("bcde"); } } class ConcreteObserver1 implements Observer { private Subject subject; public ConcreteObserver1(Subject subject) { this.subject = subject; } @Override public void update() { // TODO Auto-generated method stub System.out.println("1"+subject); } } class ConcreteObserver2 implements Observer { private Subject subject; public ConcreteObserver2(Subject subject) { this.subject = subject; } @Override public void update() { // TODO Auto-generated method stub System.out.println("2"+subject); } } class Client { public static void main() { Subject subject = new ConcreteSubject1(); subject.Attach(new ConcreteObserver1(subject)); subject.Attach(new ConcreteObserver2(subject)); subject.Notify(); //更換主題類 // Subject subject = new ConcreteSubject2(); // // subject.Attach(new ConcreteObserver1(subject)); // subject.Attach(new ConcreteObserver2(subject)); // // subject.Notify(); } } ~~~ 話說我感覺這一章這本書好像沒怎么講明白,所以感覺自己說呢也沒有說明白,不過差不多理解什么意思了,我感覺樹上前面的代碼完全就還是耦合的,還是在ConcreteObserver類中調用了ConcreteSubject類,它沒有用到抽象的類,我感覺可能書上弄錯了。 觀察者模式優點:就是類與類之間依賴的是抽象對象,而不是具體對象,當具體對象更改時對于整個代碼是沒有影響的,同時是多個對象依賴于一個抽象對象,當對象狀態發生變化時通知其它對象發生相應的改變比較方便 觀察者模式缺點:抽象通知者依賴的是抽象觀察者,當抽象觀察者產生的時間在抽象通知者之后,那么就沒有update方法給抽象觀察者調用了。 ### 委托 用委托的方法可以解除掉觀察者模式的缺點,在c#中有委托這種用法,在java中就要使用到動態代理,需要理一理思路,查一查文章,等下再寫一篇專門說java動態代理的吧
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看