0%

java | 接口提升扩展性

这个方法给了我很大的启发。

考虑这样一个场景,我们将自己的程序打包成一个 jar 包,然后暴漏一个方法供调用,但是,很多人会有不同的传递需求,比如

  • 传递参数为
    • String
    • int
    • 自己定义的数据类型
  • 其他问题

每个人的需求都是多种多样的,所以,我们不可能适应所有人的需求,那么,有没有一劳永逸的方法?

目前,该博文使用的方法是启用函数式接口来解决。

关于函数式接口请参考。

在某一个业务场景下,我有这样一个需求,就是以 netty 为基础,构建一个 socket 服务器,然后定时向某一具体的端口转发数据。并且,要把该项目打包成一个 jar 包,对外只暴漏一个开启方法。

我的启动方法如下

Server.build("0.0.0.0",7777,data,50).run();

其中

  • 7777
    • 端口
  • data
    • 传递的数据
  • 50
    • 定时发送频率

这里面就是一个问题,data 的变化性太大,每个人的业务场景不同,只是通过参数传递,可扩展性太差了。

我来简单的写一下业务场景。具体的实现就不写了,只写一个大概的逻辑。

1
2
3
4
5
6
7
8
9
10
11
12
public class Server{
public static Server build(String ip,int port,byte[] data,int inte){
...
}

public void run(){
...
send(data) // data 是上面传的
// send(data) 是一个 Runable 会按照 inte ms 来发送数据
...
}
}

如果想要扩展性更好,需要使用接口。这里选用了 Consumer 接口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Server{
public static Server build(String ip,int port,Consumer<Object> consumer){
...
}

public void run(){
consumer.accept();
}
}

public class Sender implements Consumer<Object>{
@Override
public void accept(){
....
}
}

Server.build("0.0.0.0",7777,new Sender()).run();

Sender 通过实现接口的方法,可以自己自主的转发的逻辑。

请我喝杯咖啡吧~