Java 传递类与传递实例;简单的API设计

Java 传递类与传递实例;简单的API设计,java,generics,class-design,Java,Generics,Class Design,导言 我知道我将要描述的API/库非常简单,我做什么来让它工作其实并不重要,但我希望最终能够设计更复杂的系统,并希望获得一些关于如何设计简单有效的API的良好实践 信息 我正在用Android重新设计一个项目,以使一些代码更加可重用,并不断尝试新的“API”设计以供实践 这个相当简单的应用程序的一部分是围绕屏幕上的文本进行洗牌,因为有三个不同的程序基于这个“库”,它们有自己的洗牌效果,所以我选择将通用代码拉到一个实际的库中,并将洗牌的实现与系统的其余部分解耦。为了实现这一点,我做了一些更改:处理

导言

我知道我将要描述的API/库非常简单,我做什么来让它工作其实并不重要,但我希望最终能够设计更复杂的系统,并希望获得一些关于如何设计简单有效的API的良好实践

信息

我正在用Android重新设计一个项目,以使一些代码更加可重用,并不断尝试新的“API”设计以供实践

这个相当简单的应用程序的一部分是围绕屏幕上的文本进行洗牌,因为有三个不同的程序基于这个“库”,它们有自己的洗牌效果,所以我选择将通用代码拉到一个实际的库中,并将洗牌的实现与系统的其余部分解耦。为了实现这一点,我做了一些更改:处理洗牌的代码放在一个类中,每个应用程序提供一个配置对象,其中填充了运行特定应用程序所需的值。在当前的设计中,配置对象提供了所需的洗牌实现类。然后,库在以后需要时创建该类的实例

我喜欢这一点,因为它让我的库控制对象的所有内容,并消除了实例对外部代码的暴露,但它也阻止我使用构造函数参数speed of shuffle、direction、,一种解决方案是传入某种数组,实现可以在库创建时从中提取数据,但我讨厌库要求您在编译时以某种模糊且难以检查的方式传入参数,比如速度:90;赫普:德普

我的问题


通过配置传递类是最好的,这样库就可以控制它的整个生命周期,还是不切实际,我应该创建一个该死的实例并传递它。另外,如果通过一门课是不切实际的,那么什么时候通过一门课是个好主意?除了在某种映射中注册类实例以供以后在某种插件系统中查找之外,如果使用DI依赖项注入,对象的生命周期在库外部处理。我更喜欢这种方法,除非生命周期非常简单,组件不需要配置。

我开始觉得Android的生命周期严重限制了我实现“正常”设计的能力。我认为提供一个配置对象,最终使用值/类型访问库以使用配置是基于一个接口的,这是手动注入的依赖关系。这还允许我动态更改配置,以获得感兴趣的用户端配置选项。