統一物件訊息程式設計(7) 物件訊息程式設計框架4

2021-08-22 08:37:07 字數 2996 閱讀 8391

模組工廠 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 能否修改屬性的值...