ObservePattern--觀察者模式java實現

先上代碼

1.Observer 接口

package cn.xiaobo.ObserverPattern;html

/**
 * 觀察者接口
 * @author Administrator
 *
 */
public interface Observer {
java

    public void update(String info);
}
ide

2.具體的實現Observer 接口的學生觀察類

package cn.xiaobo.ObserverPattern;測試

/**
 * 這是個學生觀察者,只有更新做業通知和,訂閱老師主題的任務;
 * @author Administrator
 *
 */
public class StudentObserver implements Observer{
this

    //被訂閱的對象
    private TeacherSubject t;
    //學生姓名
    private String name;
    /**
     * 更新通知
     */
    @Override
    public void update(String info) {
        System.out.println("今天佈置了"+info);
    }
    public StudentObserver(TeacherSubject t,String name) {
        this.name=name;
        this.t=t;
        //訂閱老師
        t.addObserver(this);
    }
    
spa

}.net

3.Subject (主題)接口

public interface Subject {設計

    public void addObserver(Observer o);
    public void delObserver(Observer o);
    public void notifyObserver();
}
server

4.Subject (主題)接口實現的老師類

package cn.xiaobo.ObserverPattern;htm

import java.util.ArrayList;


/**
 * 這是個老師主題,有添加,刪除,通知觀察者的方法;
 * @author Administrator
 *
 */
public class TeacherSubject implements Subject{

    private ArrayList<Observer> observers=new ArrayList<>();
    private String info;
    @Override
    public void addObserver(Observer o) {
        observers.add(o);
        
    }

    @Override
    public void delObserver(Observer o) {
        observers.remove(o);
    }

    @Override
    public void notifyObserver() {
        for(int i=0;i<observers.size();i++){
            observers.get(i).update(info);
        }
        
    }
    
    public void setHomework(String info) {
        this.info=info;
        info="今天的做業是"+info;
        this.notifyObserver();
    }

}

5.測試

package cn.xiaobo.ObserverPattern;

/**
 * 觀察者模式提供了一種對象設計,讓主題和觀察者之間耦合度降得很低,爲何呢?關於觀察者的一切,
 * 主題只知道觀察者實現了Observer接口,
 * 並不須要觀察者具體的類是誰,作了什麼或者其餘細節.
這樣的話,因爲鬆耦合,改變主題或者觀察者其中一方,並不會影響另外一方,只要他們之間的接口仍被遵照,就能夠自由地改變它.
下降對象之間的耦合度,也是面設對象設計的一個很重要的原則.
 * @author Administrator
 *
 */
public class ObserverTest {

    public static void main(String[] args) {
        TeacherSubject teacher=new TeacherSubject();
        
        StudentObserver zhangsan=new StudentObserver(teacher, "張三");
        StudentObserver lisi=new StudentObserver(teacher, "李四");
        StudentObserver wangwu=new StudentObserver(teacher, "王五");
        StudentObserver zhaoliu=new StudentObserver(teacher, "趙六");
        StudentObserver raoqi=new StudentObserver(teacher, "饒七");
        
        
        teacher.setHomework("語文必修1課文全背誦");
        teacher.setHomework("金太陽第三章的練習題第一,第三小題");
    }

}


6.結果

今天佈置了語文必修1課文全背誦
今天佈置了語文必修1課文全背誦
今天佈置了語文必修1課文全背誦
今天佈置了語文必修1課文全背誦
今天佈置了語文必修1課文全背誦
今天佈置了金太陽第三章的練習題第一,第三小題
今天佈置了金太陽第三章的練習題第一,第三小題
今天佈置了金太陽第三章的練習題第一,第三小題
今天佈置了金太陽第三章的練習題第一,第三小題
今天佈置了金太陽第三章的練習題第一,第三小題

        6.1因而可知對於觀察者來講,只要訂閱的主題,也就是老師,一佈置

做業,對所有的學生都會通知

7.參考博客

    https://www.cnblogs.com/fingerboy/p/5468994.html

相關文章
相關標籤/搜索