1. 程式人生 > >java設計模式(1)觀察者模式

java設計模式(1)觀察者模式

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

}
}