java多方法隐藏设计

jaql4c8m  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(360)

关闭。这个问题是基于意见的。它目前不接受答案。
**想改进这个问题吗?**更新这个问题,这样就可以通过编辑这篇文章用事实和引文来回答。

上个月关门了。
改进这个问题
我目前正在实施一个增强设计。我需要你的设计建议。
以下是我的要求:
我有4种方法,即->获取\模式、转换\模式、阶段\模式和注册\模式
我有两个客户。一个客户机应该只能重写一个方法->转换模式,而另一个客户机应该可以重写所有方法
我想到了以下方法:
接口a->与fetch schema、staging、register to schema registry方法的默认实现(Java8)的接口
扩展接口a的类可以重写fetch schema、staging、register to schema registry方法
接口b->transformer的接口,其中包含transformer方法的默认实现
扩展接口b的类可以重写transformer方法
在上述方法中,第一个客户机将只使用接口b,而想要覆盖所有方法的第二个客户机可以使用接口a和接口b
示例代码:

interface A {
    default fetch_schema(){ // Some default implementation }
    default stage_schema(){ // Some default implementation }
    default register_schema(){ // Some default implementation }
}

interface B {
    default transform_schema(){ // Some default implementation }
}

// Sample class used by client 1
class SampleTransformer implements B {
    @Override
    transform_schema(){
        // Some implementation
    }
}

// Sample class used by client 2
class SampleTransformer implements A,B {
    @Override
    fetch_schema(){
        // Some implementation
    }

    @Override
    stage_schema(){
        // Some implementation
    }

    @Override
    register_schema(){
        // Some implementation
    }

    @Override
    transform_schema(){
        // Some implementation
    }
}

另一种方法是:
接口a->接口,带有fetch schema、staging、register to schema registry方法的声明
扩展接口a的类可以重写fetch schema、staging、register to schema registry方法
接口b->包含transformer方法声明的transformer接口
扩展接口b的类可以重写transformer方法
在上述方法中,将有一个名为defaultschemaprocessor的默认bean,它扩展接口a和b并重写必要的方法。
想要重写这些方法的相应客户机将定义自己的bean并替换defaultschemaprocessor。
第一个客户机的bean将只扩展接口b,而想要覆盖所有方法的第二个客户机可以使用接口a和接口b
示例代码:

interface A {
    fetch_schema();
    stage_schema();
    register_schema();
}

interface B {
    transform_schema();
}

// DefaultSchemaProcessor
class DefaultSchemaProcessor implements A,B {
    @Override
    fetch_schema(){
        // Some implementation
    }

    @Override
    stage_schema(){
        // Some implementation
    }

    @Override
    register_schema(){
        // Some implementation
    }

    @Override
    transform_schema(){
        // Some implementation
    }
}

// Sample class used by client 1
class SampleTransformer implements B {
    @Override
    transform_schema(){
        // Some implementation
    }
}

// Sample class used by client 2
class SampleTransformer implements A,B {
    @Override
    fetch_schema(){
        // Some implementation
    }

    @Override
    stage_schema(){
        // Some implementation
    }

    @Override
    register_schema(){
        // Some implementation
    }

    @Override
    transform_schema(){
        // Some implementation
    }
}

你们有什么建议吗?

rta7y2nd

rta7y2nd1#

因为您可以有另一个使用默认实现的客户机,所以我建议您使用Java8默认接口方法。使用它将删除对defaultschemaprocessor的要求。

interface A extends B {
    default fetch_schema(){ // Some default implementation }
    default stage_schema(){ // Some default implementation }
    default register_schema(){ // Some default implementation }
}

interface B  {
    default transform_schema(){ // Some default implementation }
}
j0pj023g

j0pj023g2#

好吧,整件事都是基于观点的。作为 client 2 可以重写所有的方法,也可以 inteface A 包含以下所有方法:

interface B {
    transform_schema();
}

interface A extends B {
    fetch_schema();
    stage_schema();
    register_schema();
}

通过这个 client 1 仅实现接口 Bclinet 2 只需要 implement A 不知道b。

相关问题