码迷,mamicode.com
首页 > 编程语言 > 详细

Helper 类在Java和C++中的设计

时间:2019-01-25 18:49:03      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:零基础   进程   let   访问   攻击   状态   编码   场景   one   

 

 

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 new UnsupportedOperationException("CloseHelper is a helper class,can‘t be initated");

}

 

public static void close(ResultSet set , Logger log){

 

  if(set!=null){

    try{

      set.close();

    }catch(SQLException ex){

      log.error(ex.getMessage(),ex);

    }

  }

}

 

 

public static void close(Statement statement , Logger log){

  if(statement!=null){

    try{

      statement.close();

    }catch(SQLException ex){

      log.error(ex.getMessage(),ex);

    }

  }

}

 

}

 

C++

同样的推理,同样的结论。但是C++中缺少代码检查工具,如果忘记将构造函数变成私有,Java的检查工具通常会提醒。C++只能靠制定编码规范来解决。而且C++中也没有final关键字来表示类不允许被继承。

 

 

 

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

Helper 类在Java和C++中的设计

标签:零基础   进程   let   访问   攻击   状态   编码   场景   one   

原文地址:https://www.cnblogs.com/skiwnywh/p/10320966.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!