java設計模式(1)觀察者模式
阿新 • • 發佈:2019-01-29
說到java觀察者模式 簡單點一個例子就是
被觀測方通過提供註冊介面,使得觀測方能夠通過註冊使得自己實時掌握被觀測方資料變化。
好了 接下來是程式碼
被觀測目標的介面,繼承這個類的目標天生自帶 拉人 踢人技能。只有被邀請的人才能看
1.subject.ava
package observer; import java.util.ArrayList; import java.util.List; public class subject { protected List<Person> persons = new ArrayList<Person>(); public void uptargect(int mytargect){ for(Person per:persons){ per.update(mytargect); } } public void registPerson(Person per){ persons.add(per); } public void removePerson(Person per){ persons.remove(per); } }
子類.一個自己屬性變化的方法 用執行緒是嫌她執行太快0.0 讓他一秒來一次
2.subjectA .java
package observer; public class subjectA extends subject implements Runnable{ private int Mytargect; @Override public void run() { // TODO Auto-generated method stub while(true){ try { Thread.currentThread().sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Mytargect+=1; this.uptargect(Mytargect); } } }
觀察者(偷窺者0.0)的介面類 繼承者自帶 實時更新偷窺內容。。
3.
package observer;
public interface Personobj {
public void update(int targect);
}
觀察者實現類
targect為觀察到的結果,那麼
package observer; public class Person implements Personobj{ private int targect; private String name; Person(String name){ this.name=name; } Person(){} public int getTargect() { return targect; } public void setTargect(int targect) { this.targect = targect; } @Override public void update(int mytargect) { // TODO Auto-generated method stub this.targect=mytargect; getinfo(); } public void getinfo(){ System.out.println(name+":捕捉到目標數值:"+ targect); } }
測試
package observer;
/**
*
* 觀察者模式
* 適用範圍 遊戲對戰,廣播程式 等等
*
* @author 944658413
*
*/
public class Test {
public static void main(String[] args) {
//被測目標
subjectA a = new subjectA();
//觀察者
Person pA = new Person("小明");
Person pB = new Person("小花");
Person pC = new Person("小剛");
//被測目標加入觀察者
a.registPerson(pA);
a.registPerson(pB);
a.registPerson(pC);
//被測目標啟動執行
Thread t = new Thread(a);
t.start();
}
}