觀察者模式(2)

劉雅娟-Demi發表於2018-03-02

優缺點

1.一對多,面向介面實現
2.解耦合,在觀察者和被觀察者之間建立一個抽象耦合
3.為子系統提供一個一致的介面

3.如果觀察者之間有迴圈依賴,被觀察者會出發它們的迴圈呼叫導致系統崩潰
4.觀察者知道觀察的物件發生了變化,但不知道知怎麼發生變化的

public static void main(String[] args)

1.string[] args 是main函式的形式引數,獲取命令輸入
2.static 方便呼叫,不用在main方法裡建立物件

java內建觀察者模式

1.內建介面程式碼

package java.util;

import java.util.Observable;

public interface Observer {
    void update(Observable var1, Object var2);
}

http://blog.csdn.net/true100/article/details/53004897

2.推拉體現
拉的體現

public interface Observer {
 //method to update the observer, used by subject 傳入主題獲取物件
 public void update();
 //attach with subject to observe
 public void setSubject(Subject sub);
}
public class ConcreteObserver implements Observer {

    private String name;
    private String state;

    public ConcreteObserver(String name) {
        this.name = name;
    }
    public String getState() {
        return state;
    }
    public void setState(String state) {
        this.state = state;
    }
    @Override
    public String getName() {
        return name;
    }

    @Override
    public void update(Subject subject) {
        // 主動去主題裡拿資料
        state = ((ConcreteSubject) subject).getState();
        System.out.println(getName() + "觀察者狀態更新為:" + state);
    }

}

內部類

  • 成員內部類
  • 靜態內部類
  • 區域性內部類
  • 匿名內部類

1.成員內部類 相當於非靜態方法

class Outer{
    private int a = 3;
    private Inner in;
    public Outer(){
        in = new Inner();
    }
    public int getInnerA(){
        return in.a;  // 引用內部類的變數,需通過例項
    }
    public class Inner {
        public int a = 2;
        public void doSomething() {
            // 呼叫外部類的屬性
            System.out.println(MemberInner.this.a);// 這塊要注意......很重要!!!
            System.out.println(a);
        }
    }
}

2.靜態內部類,用static修飾的成員內部類
3.區域性內部類
定義在程式碼塊、方法體內、作用域(使用花括號“{}”括起來的一段程式碼)內的類叫區域性內部類。

總結

以上是一些問題的總結和了解,會不斷更新,不斷進步。

相關文章