【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包中。如果你觉得有任何不妥当或者需要新增的方法,请随时与我们联系提出您的意见,因为这些类设计的初衷就是用来提供给开发人员进行使用。

目录
相关文章
|
3月前
|
C++
C++实现单例模式-多种方式比较
单例模式,面试中经常被问到,但是很多人只会最简单的单例模型,可能连多线程都没考虑到,本文章从最简单的单例,到认为是最佳的单例模式实现方式,单例模式没有什么知识点,直接上源码
49 0
|
5月前
|
设计模式 存储 安全
八种创建单例模式的方式-懒汉式与饿汉式及枚举
八种创建单例模式的方式-懒汉式与饿汉式及枚举
79 2
|
6月前
|
设计模式 安全 Java
JAVA设计模式1:单例模式,确保每个类只能有一个实例
JAVA设计模式1:单例模式,确保每个类只能有一个实例
|
6月前
|
设计模式 安全 Java
特殊类设计及单例模式(C++)
特殊类设计及单例模式(C++)
65 1
|
3月前
|
设计模式 安全 Java
Java设计模式—单例模式的实现方式和使用场景
那么为什么要有单例模式呢?这是因为有的对象的创建和销毁开销比较大,比如数据库的连接对象。所以我们就可以使用单例模式来对这些对象进行复用,从而避免频繁创建对象而造成大量的资源开销。
54 1
|
8月前
|
安全 Java 编译器
单例模式的4种实现方式
单例模式的4种实现方式
74 0
|
8月前
|
设计模式 安全 Java
【Java|多线程与高并发】设计模式-单例模式(饿汉式,懒汉式和静态内部类)
设计模式是一种在软件开发中常用的解决复杂问题的方法论。它提供了一套经过验证的解决方案,用于解决特定类型问题的设计和实现。设计模式可以帮助开发人员提高代码的可重用性、可维护性和可扩展性。
|
11月前
|
安全 Java
并发编程-09安全发布对象+单例模式详解
并发编程-09安全发布对象+单例模式详解
48 0
并发编程-09安全发布对象+单例模式详解
|
11月前
Unity3D-单例模式各种写法应用
Unity3D-单例模式各种写法应用
86 0
|
SQL Java
解决单例模式中懒汉式不支持高并发,饿汉式不支持懒加载问题最简单方法——基于枚举类型的单例实现
解决单例模式中懒汉式不支持高并发,饿汉式不支持懒加载问题最简单方法——基于枚举类型的单例实现
128 0
解决单例模式中懒汉式不支持高并发,饿汉式不支持懒加载问题最简单方法——基于枚举类型的单例实现