【Velocity官方指南】使用單例模式還是非單例模式
譯者:大胃 原文鏈接
從Velocity 1.2以后的版本,開發者對于Velocity引擎的使用有了兩種方式,單例模型(Singleton)以及多個獨立實例模型。Velocity的核心部分也采用了這兩種模型,目的是為了讓Velocity可以更容易與你的JAVA應用相集成。
單例模式(Singleton):
這是一個遺留(Legacy)模式,在這種模式下只有一個Velocity的引擎在JVM(或者是WEB容器,這取決于你的環境)中會被實例化,同時被全部程序所共享。這對本地化的配置以及可被分享的其他資源來說是十分方便的。舉個例子,在Servlet 2.2以上的版本中,將Velocity實例化并且采用單例模型提供給一個web程序使用是一種十分值得推薦的模式,這樣web應用中的servlet可以共享資源,比如:模板(templates),日志工具(logger)等等。單例模式可以通過如下的類進行訪問: org.apache.velocity.app.Velocity,下文中會給出一個具體的例子
import org.apache.velocity.app.Velocity; import org.apache.velocity.Template; ... /* * Configure the engine - as an example, we are using * ourselves as the logger - see logging examples */ Velocity.setProperty( Velocity.RUNTIME_LOG_LOGSYSTEM, this); /* * now initialize the engine */ Velocity.init(); ... Template t = Velocity.getTemplate("foo.vm");
拆分實例(Separate Instance)
作為1.2版本后的新功能,你可以創建不同的實例,你可以在JVM(或者Web 容器)中隨心所欲的配置你想要的Velocity實例的數量。在你想提供多種不同的配置時,例如:模板字典(template directories),不同的日志工具(logger)將會非常有用。如果你想使用拆分實例,可以用過類: org.apache.velocity.app.VelocityEngine。如上文,這里我們也將提供一個例子
</pre> <pre>import org.apache.velocity.app.VelocityEngine; import org.apache.velocity.Template; ... /* * create a new instance of the engine */ VelocityEngine ve = new VelocityEngine(); /* * configure the engine. In this case, we are using * ourselves as a logger (see logging examples..) */ ve.setProperty( VelocityEngine.RUNTIME_LOG_LOGSYSTEM, this); /* * initialize the engine */ ve.init(); ... Template t = ve.getTemplate("foo.vm");</pre> <pre>
如你所見,他們的使用非常的簡單明了。除了一些細微的語義上的區別外,使用單例或者可拆分實例對你的上層應用或者模板來說并沒有太大的區別.
作為一個程序員,如果你想采用單例模式,需要訪問org.apache.velocity.app.Velocity這個類,如果采用非單例模式(拆分實例)的話只需訪問類 org.apache.velocity.app.VelocityEngine
在任何時候請不要在程序中使用內置的 在包org.apache.velocity.runtime 下的Runtime, RuntimeConstants, RuntimeSingleton or RuntimeInstance 類,因為這些類的設計僅僅是供velocity內部使用,并且未來可能會被修改。請按我們前文描述的,開發人員所需使用的類文件在 org.apache.velocity.app包中。如果你覺得有任何不妥當或者需要新增的方法,請隨時與我們聯系提出您的意見,因為這些類設計的初衷就是用來提供給開發人員進行使用。