模組工廠 tlobjectfactory 負責模組的建立、初始化和儲存。每次程式執行,首先例項化模組工廠,然後由模組工廠啟動主模組。
原始碼:
public class tlobjectfactory extends tlbasemodule
public void destroymodule()}}
@override
protected void init()
@override
protected tlmsg checkmsgaction(object fromwho, tlmsg msg)
return returnmsg;
}private tlmsg getmoduleinfactory(object fromwho, tlmsg msg)
private void registobject(object fromwho, tlmsg msg)
objs.add(object);
}protected tlmsg getmodule(object fromwho, tlmsg msg)
return creatandconfigmodule(newmodulename,modulename,msingleton);
}protected tlmsg creatandconfigmodule(string newmodulename,string modulename,string msingleton)
else
if(module!=null)
}module = createmodule( modulename,newmodulename);
if (module != null)
else
returnmsg.setparam("singleton", "false");
returnmsg.setparam("new", "true");
}returnmsg.setparam(factory_moduleinstance, module);
returnmsg.setparam(factory_modulename, newmodulename);
return returnmsg;
}private boolean issingleton(string modulename,string msingleton)
private object getfromsession(string modulename)
return null ;
}private boolean puttosession(string modulename,object module)
private tlbasesessiondata getsessionobj()
return sessiondata;
}protected object createmodule(string modulename,string newmodulename)
classfilename = modulesclass.get(modulename).get("classfile");
}else
object module = createobject(newmodulename, classfilename);
if (module != null)
return module;
}protected void configmodule(object module, string configfile,hashmapparams)
}protected hashmapgetmoduleparams(string modulename)
}return params;
}protected object createobject(string modulename, string classname) catch (classnotfoundexception e)
constructor<?> cons = null;
try catch (nosuchmethodexception e1) catch (nosuchmethodexception e2) catch (instantiationexception e3) catch (illegalacces***ception e4)
return obj;
}try catch (instantiationexception e5) catch (illegalacces***ception e6) catch (invocationtargetexception e7)
}try catch (instantiationexception e8) catch (illegalacces***ception e9) catch (invocationtargetexception e10)
return null;
}}
主要屬性:
hashmap> modulesclass
模組類表。格式:模組名->模組引數(類名、配置檔名、其他引數)
模組引數中,類名為必須,根據類名建立模組,其他引數為可選。配置檔名如果沒有指定,則查詢預設配置,格式: 模組名_config.xml。如果找到則用該檔案配置模組。
模組工廠也是對tlbasemodule的繼承,因此也具備普通模組的功能。一般情況我們只是用它創立、獲取模組,主要用的訊息action為「getmodule」』。
對於多執行緒程式設計中,有些模組為主執行緒下才可用或被多執行緒公用,這樣裡面增加了session模組,一些模組可以儲存到session裡,不同的環境session實現不同,在tomcat中,通過context實現session。對於乙個模組是否存到session中,在配置檔案裡面可配置。
前面提到,在tlbasemodule的putmsg中,我們封裝了模組的獲取,因此一般情況也無需特意給模組工廠傳送訊息獲取模組。
具體應用環境中,由於不同的環境配置檔案目錄不同,因此具體應用中要新建立乙個模組工廠類繼承該模組工廠。新建的類主要設定配置檔案目錄,見後續案例。
一 物件模型
在ruby程式中,物件僅僅是其大世界的乙個公民而已,除了物件還有其他語言構件,比如類 class 模組 module 以及例項變數 imstance variable 等,元程式設計操控的就是這些語言構件。所有語言構件存在於其中的系統稱為物件模型,它是ruby的靈魂。1 物件由一組例項變數和乙個類的...
統一物件訊息程式設計詳解 定時任務模組的命令列控制台
前面文字介紹了定時任務模組,我們可以通過配置檔案的動態配置來控制任務的行為。由於配置檔案的動態更新是所有配置引數都重新更新,對於多執行緒的,某些情況下會影響到其他任務。如我們對任務a進行了restart 下次我們對任務b進行shutdown,如果我們忘記將a的狀態改為run,則a再次restart。...
物件導向(一) 物件屬性
物件屬性型別 每個物件都是基於乙個引用型別建立的 1.資料屬性 2.訪問器屬性 4個特性 1.configurable 能否delete屬性從而重新定義屬性 能否修改屬性的特性 能否把屬性改為訪問器屬性 2.enumerable 能否用for in迴圈返回屬性 3.writable 能否修改屬性的值...