日常工作小结(七)

    有一个模块A(其实只有一个类),部门内所有JAVA项目都需要调用该模块配合完成相关的业务功能。由于今年项目组换了架构,正好A模块的底层也做了一些调整,屏蔽了一些设备的差异。正好借此机会想重写一下此模块,因为之前还是存在不少问题的:

    a. 对于上层应用的调用者来说,没有屏蔽掉底层的一些细节性的东西

    b. 封装不够彻底,如方法参数太多

    c. 该模块需要的初始化需要一些参数(各项目间不同,同一个项目中固定)。该类是一个普通的JAVA类,调用者每次都需要通过new获取对象,然后需要从数据库获取参数,完成调用之前的初始化工作。

    我现在的想法是:

    1. 将该类设计成单例模式(延迟加载)

    2. 底层相关的一些参数写在配置文件中,模块初始化时从配置文件中获取(这样可以保证第一次调用时初始化,只需要初始化这一次)

    3. 丰富该模块,将一些参数封装成类B。对象的成员变量尽量简单,由模块内部处理,交给底层接口处理。比例,底层接口需要一个字节数组,但是上层应用有的是一个String对象,那么类B的成员变量最好是一个String,而不是byte[]。这里的想法不知道对不对,还请大家多多批评指正。

    4. 使用枚举屏蔽一些0,1, 2之类的参数。

public class MyAPI {
    private static MyAPI instance;
    
    private final String APP_ID;
    private final String ASYMMETRIC_ALGORITHM;
    
    private MyAPI() throws Exception {
        Properties prop = new Properties();
        prop.load(new FileInputStream(System.getEnv("TEST") + "/test.ini"));
        APP_ID = prop.getProperty("app_id");
        ASYMMETRIC_ALGORITHM = prop.getProperty("asy_algo");
        //固定参数都在这里初始化
    }
    
    public static MyAPI getInstance() throws Exception {
        if (instance == null) {
            instance = new MyAPI();
        }
        return instance;
    }
    
    public void test02() throws Exception {
        System.out.println("test02");
    }
    
    public void test01() {
        System.out.println("test01");
    }

    //other methods
}

    调用的样子差不多就是下面这个样子:

MyAPI.getInstance().test01();

    看代码其实就是一个简单的单例,但是后面的重点工作是入参和出参的确定,需要大家在一起讨论,制定出稳定好用可复用的接口。

你可能感兴趣的:(单例模式,模块接口)