對 Observer進行包裝,遇到一些問題
主程式呼叫處理執行緒,然後執行緒處理完,又要呼叫主程式的方法進行結束,感覺處理執行緒呼叫主程式方法進行,又返回到原程式,感覺有點關聯性太強,不易於模組話,所以想到利用Observer的機制,將兩個關聯起來,這樣處理執行緒就不用呼叫主程式。
[@more@]最近公司有個專案:主程式呼叫處理執行緒,然後執行緒處理完,又要呼叫主程式的方法進行結束,感覺處理執行緒呼叫主程式方法進行,又返回到原程式,感覺有點關聯性太強,不易於模組話,所以想到利用Observer的機制,將兩個關聯起來,這樣處理執行緒就不用呼叫主程式。
由於程式大體已經完成,所以我不可能去修改處理執行緒的extends關係,所以我想自己包裝一下Observer,具 體程式碼如下:
1. BaseObserver 類:
import java.util.Observer;
import java.util.Observable;
import java.util.List;
import java.util.ArrayList;
import java.lang.reflect.Method;
public class BaseObserver implements Observer {
private String methodName = "";
private Class list = null;
//設定需要激發的類
public void setObserverObject(Class observer) {
if (list == null)
list = observer;
}
//設定需要激發的方法名
public void setObserverMethod(String methodName) {
this.methodName = methodName;
}
public void update(Observable obj, Object arg) {
if (obj instanceof BaseObservable) {
try {
Method method = list.getClass().getDeclaredMethod(methodName);
……………………
……………………
} catch (NoSuchMethodException e) {
} catch (SecurityException e) {
}
}
}
2.BaseObservable 類
import java.util.Observable;
import java.lang.reflect.Method;
import java.lang.NoSuchMethodException;
public class BaseObservable extends Observable {
private Class className = null;
private String methodName = "";
private Class[] parameterTypes ;
//設定被觀察者名 和 方法名
public void setObserveable(Class className, String methodName)
throws NoSuchMethodException, SecurityException{
this.className = className;
this.methodName = methodName;
}
//設定被觀察者名 和 方法名 及 引數
public void setObserveable(Class className, String methodName,Class[] arameterTypes)
throws NoSuchMethodException, SecurityException
{
this.className = className;
this.methodName = methodName;
this.parameterTypes = new Class[parameterTypes.length];
for(int i =0;i
}
}
//被觀察者的觀察方法
public void doNotifyObserver()
throws NoSuchMethodException, SecurityException{
setChanged();
if(parameterTypes==null)
notifyObservers(className.getMethod(methodName));
else
notifyObservers(className.getMethod(methodName,parameterTypes));
}
}
3. Product 類:一般類
public class Product extends Observable {
private String name;
private float price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}
4. Action 類:一般類
public class Action {
public void doAction(String str){
System.out.println(str);
System.out.println("action");
}
}
以上是所以得類,現在我想處理如下:
當Product 的 getName 被呼叫時,處理 Action 的 doAction 方法:
Product product = new Product();
Action action = new Action();
BaseObservable observable = new BaseObservable();
BaseObserver observer = new BaseObserver();
try{
//設定觀察者
observer.setObserverObject(Action.class);
observer.setObserverMethod("doAction");
//觀察者放入觸發者內
observable.addObserver(observer);
//設定觸發者
observable.setObserveable(Product.class, "getName");
//活動
product.setName("name");
product.getName();
//最後掉用 (不好的地方,感覺要改進)
observable.doNotifyObserver();
}catch(NoSuchMethodException e){
…………
…………
}catch(SecurityException e){
…………
…………
}
以上是我的所有思路,但是在實際中不能執行,不知道怎麼回事,感覺原理上還是有問題,
小弟是初學設計模式,希望大家指正,不慎感激。
歡迎扔雞蛋,丟石頭,>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9879276/viewspace-983064/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 對Spring 的RestTemplate進行包裝SpringREST
- ElasticSearch安裝中遇到的一些問題Elasticsearch
- Windows 安裝 Scoop 來進行包管理WindowsOOP
- Observer模式的問題Server模式
- 面試中遇到的一些問題面試
- 小程式遇到的一些問題
- Repo安裝遇到問題
- Docker遇到的一些問題和感想Docker
- Laravel 安裝遇到的問題Laravel
- 安裝mysql遇到的問題MySql
- 安裝rails遇到的問題AI
- docker開荒hyperf遇到的一些問題Docker
- vue工作中遇到的一些小問題Vue
- atxserver2 部署遇到一些問題Server
- Android studio遇到的一些小問題Android
- 今天測試oracle stream遇到一些問題Oracle
- 通過asmcmd進入asm例項時可能會遇到的一些問題ASM
- 記錄VMware安裝VMware Tools過程及遇到的一些問題
- 在伺服器上安裝配置環境遇到的一些問題伺服器
- LAMP平臺搭建+論壇安裝流程(包括遇到的一些問題)LAMP
- 二進位制發行包還是編譯安裝編譯
- 安裝部署hzero遇到的問題
- 安裝kylin遇到的問題
- Lua安裝及遇到的問題
- maven專案遇到的一些問題記錄Maven
- 專案中遇到的一些問題小結
- 遊戲接入支付寶遇到的一些問題遊戲
- hexo部落格搭建時遇到的一些問題Hexo
- 也遇到安裝裝置出現怪問題!
- 安裝 Laravel Mix 中遇到的問題Laravel
- lumen安裝orangehill/iseed遇到的問題
- Windows安裝Filebeat遇到問題總結Windows
- jupyter安裝及遇到的問題。
- Mac下安裝PHP遇到的問題MacPHP
- 安裝mysql中遇到的問題1MySql
- phyreengine 3.12.0 安裝遇到的問題
- 利用JAAS對使用者進行驗證和授權遇到的問題
- 配置pycharm 編譯器時遇到的一些問題PyCharm編譯