Java 如何将hadoop命令公开为api

Java 如何将hadoop命令公开为api,java,design-patterns,Java,Design Patterns,用例: 我正在创建一个JavaAPI,它执行hadoop文件系统操作。应用程序使用此API执行文件操作 我创建了一个接口,其中包含抽象方法和相应的实现类,该类包含这些实现。现在我想向应用程序开发人员公开这些方法,以便开发人员执行操作 问题: 可以用来服务用例的最佳设计模式是什么 接口:HDFSClient package com.hdfsoperations.filesystemapi; import org.apache.hadoop.fs.Path; public interface H

用例:

我正在创建一个JavaAPI,它执行hadoop文件系统操作。应用程序使用此API执行文件操作

我创建了一个接口,其中包含抽象方法和相应的实现类,该类包含这些实现。现在我想向应用程序开发人员公开这些方法,以便开发人员执行操作

问题:

可以用来服务用例的最佳设计模式是什么

接口:HDFSClient

package com.hdfsoperations.filesystemapi;

import org.apache.hadoop.fs.Path;

public interface HDFSClient {

    public void createDir(Path dir) throws Exception;

    public void deleteDir(Path dir) throws Exception;

    public boolean isDir(Path path);

    public boolean isFile(Path path);

    public void copyFromLocal(Path localpath, Path hdfspath) throws Exception;

    public void copyToLocal(Path hdfspath, Path localpath) throws Exception;

    public void move(Path source, Path destination) throws Exception;

}
实现类:HDFSClientImpl

package com.hdfsoperations.filesystemapi;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.log4j.Logger;

public class HDFSClientImpl implements HDFSClient {

    private static final Logger LOGGER = Logger.getLogger(HDFSClientImpl.class);
    private static Configuration conf = new Configuration();

    FileSystem fs = null;

    public void createDir(Path dir) throws Exception {
        boolean res = false;
        fs = FileSystem.get(conf);
        res = fs.mkdirs(dir);
        if (!res) {
            LOGGER.info("Could not create the directory : " + dir);
        } else {
            LOGGER.error("Created the directory : " + dir);
        }

    }

    public void deleteDir(Path dir) throws Exception {
        boolean res = false;
        fs = FileSystem.get(conf);
        res = fs.delete(dir, true);
        if (!res) {
            LOGGER.info("Could not delete the file : " + dir);
        } else {
            LOGGER.error("Deleted the directory : " + dir);
        }

    }

    public boolean isDir(Path path) {
        boolean res = false;
        try {
            fs = FileSystem.get(conf);
            res = fs.isDirectory(path);
        } catch (Exception e) {
            LOGGER.error(e.getMessage());
        }
        return res;
    }

    public boolean isFile(Path path) {
        boolean res = false;
        try {
            fs = FileSystem.get(conf);
            res = fs.isFile(path);
        } catch (Exception e) {
            LOGGER.error(e.getMessage());
        }
        return res;
    }

    public void copyFromLocal(Path localpath, Path hdfspath) throws Exception {
        fs = FileSystem.get(conf);
        fs.copyFromLocalFile(localpath, hdfspath);

    }

    public void copyToLocal(Path hdfspath, Path localpath) throws Exception {
        fs = FileSystem.get(conf);
        fs.copyToLocalFile(hdfspath, localpath);

    }

    public void move(Path source, Path destination) throws Exception {
        fs = FileSystem.get(conf);
        fs.moveFromLocalFile(source, destination);
    }

}

我猜您不想直接向开发人员公开HDFSClientImpl。为什么需要设计模式?你想解决什么问题?@dbugger如果我不想直接公开hdfsclientmpl,我如何向开发人员公开它?@jaco0646我没有解决任何问题。但是,我想使用一种设计模式进行学习。感谢您的帮助。在软件开发中,没有什么是您不能用其他抽象层来解决的。在这种情况下,桥接模式可能就是您想要的。它提供了一个额外的层来隔离客户端对实现的更改。