如何创建一个抽象适配器类来强制子类调用构造函数中的特定方法

时间:2018-11-27 18:30:39

标签: java oop design-patterns

我正在寻找有关在Java中为自定义适配器类所做的设计的反馈。我正在尝试为抽象适配器类创建一个优雅的解决方案,该类可以扩展为创建可以连接到不同数据存储的唯一适配器。这是一些要求

  • 每个适配器必须实现用于建立连接的初始化函数
  • 每个适配器必须实现一个执行功能
  • 在创建适配器类的新实例时必须调用initialize函数
  • 每个适配器构造函数必须接受一个Configuration对象,该对象包含该特定适配器的所有连接信息。
  • 配置是适配器唯一的,但是我想要一种方法来强制配置在抽象类级别或基类级别读取并设置为config变量。

在创建新适配器时,我还选择了实现工厂模式,这是下面的代码:

BaseAdapter.java

public abstract class BaseAdapter {

    private Configuration config;

    /*
        Default constructor
    */
    protected BaseAdapter(Configuration config) {
        this.config = config;
    }

    /*
        Abstract method that will initialize adapter with
        Configuration properties
    */
    public abstract void initialize(Configuration config);

    /*
        Abstract method that will execute query
    */
    public abstract void execute(String query);

ElasticSearchAdapter.java

public class ElasticSearchAdapter extends BaseAdapter {

    public ElasticSearchAdapter(Configuration config) {
        super(config);
        initialize(config);
    }

    @Override
    public void initialize(Configuration config) {
       //initialization implementation
    }

    @Override
    public void execute(String query) {
       //execute query
    }

}

BaseAdapterFactory.java

 public class BaseAdapterFactory {

     private static final String ES = "elasticsearch";

     public static BaseAdapter getBaseAdapter(String type, Configuration config) {

        if(ES.equals(type)) {
            return new ElasticSearchAdapter(config);
        }
        else {
            return null;
        }
    }
}

我很好奇是否有更好的方法可以根据上述要求进行设计。

1 个答案:

答案 0 :(得分:1)

工厂模式是实现此目标的方法。您可能还希望探索该选项,以避免每次添加新适配器时都修改出厂设置。记住“开闭”原则:为扩展而打开,为修改而关闭。

您可以在class registration中使用工厂实现。