Helper 类在Java和C++中的设计
来源:互联网 发布:js中页面跳转load 编辑:程序博客网 时间:2024/05/23 12:01
Java
有三个选择
1)采用普通的类
有公有构造函数,没有成员变量,提供了很多成员函数作为方法,调用代码如下:
Helper helper = new Helper();
helper.f1();
这种方法的缺点是创建对象的开销是不必要的,我们知道创建对象意味着,首先要分配内存,然后在该内存上创建对象。在一个大量创建helper对象的场景中,这种负担是很大的。
2)为了避免这种反复创建对象的开销,可以采用Singleton延迟创建技术,确保整个进程中只有一个对象,并且只有第一次调用的时候才会被创建出来。
Helper helper = Helper.getInstance();
helper.f1();
这个方法进步很多了,但是仍然有缺点。这会导致系统中有很多Singleton类。其实Singleton主要用在表达系统中唯一存在的对象,通常这些对象都是有状态的。一个系统设计中过多的为了其他目的而设计的Singleton会让开发者觉得困惑。因此,如果一个类没有成员变量,应该优先设计成Helper类,而不是Singleton。
3)普通的类,提供静态方法访问,构造函数为私有。同时用final关键字修饰class表示不允许被继承。
Helper.f1();
由于私有构造函数,因此不可以被直接创建对象,也不可以被子类继承后,然后创建子类对象。如果必要的话,还可在私有构造函数中抛出异常,以防止reflection的攻击。
我认为这是Java中最好的方案。
下面是我的JDBC方面的一个Helper类代码:
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.slf4j.Logger;
public final class CloseHelper {
private CloseHelper(){
throw newUnsupportedOperationException("CloseHelper is a helperclass,can't be initated");
}
public static void close(ResultSetset , Logger log){
if(set!=null){
try{
set.close();
}catch(SQLException ex){
log.error(ex.getMessage(),ex);
}
}
}
public static void close(Statementstatement , Logger log){
if(statement!=null){
try{
statement.close();
}catch(SQLException ex){
log.error(ex.getMessage(),ex);
}
}
}
}
C++
同样的推理,同样的结论。但是C++中缺少代码检查工具,如果忘记将构造函数变成私有,Java的检查工具通常会提醒。C++只能靠制定编码规范来解决。而且C++中也没有final关键字来表示类不允许被继承。
- Helper 类在Java和C++中的设计
- Delphi语言中的Helper 关键字 和 Objective-C中的类别
- 单链表在C和JAVA中的实现
- 数据访问层中的Helper类
- Callback 在Java和C语言中的实现
- 同一段程序在java和C中的不同结果
- 同一段程序在Java和C中的不同结果
- ++i i++ 在C语言和java中的区别
- java 和 C 在网络编程中的问题
- 位操作在java和C/C++中的区别
- 设计模式在C中的应用方式
- 【Helper】泛型类和集合类的方法
- helper类
- ASP.NET MVC 3和Razor中的@helper 语法
- ASP.NET MVC 3和Razor中的@helper 语法
- ASP.NET MVC 3和Razor中的@helper 语法
- ASP.NET MVC 3和Razor中的@helper 语法
- ASP.NET MVC 3和Razor中的@helper 语法
- 20110504
- 启示录:打造用户喜爱的产品(china-pub首发)
- 电脑操作最忌讳的十八个小动作
- 何彻底删除SQL Server2005(服务、组件、注册表、安装目录) 安装失败 重装
- struts2 文件上传
- Helper 类在Java和C++中的设计
- vnc的使用
- 同一局域网、不同局域网共享和连接打印机设置
- 申请六维邀请码最新标准(2010年11月新修订)
- ASP.Net TextBox控件只允许输入数字(转)
- insert_iterator 类的简单使用
- [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)
- symbian同步绘图(转载)
- 通过JS修改form表单中的内容并传递到另一个PHP界面中