gpt4 book ai didi

java - 在项目之间共享单例逻辑,并针对每个项目进行修改

转载 作者:行者123 更新时间:2023-12-01 13:18:47 27 4
gpt4 key购买 nike

我正在开发两个具有相似(但不相同)逻辑的 Android 应用程序,并且我想在它们之间共享代码。目前,我为每个应用程序都有一个项目,还有一个用于共享类的附加项目。共享类项目是一个库,应用程序项目链接到该库。

我遇到的问题是一个负责从服务器获取数据并缓存该数据的类。该类称为 DataSingleton。对于两个应用程序来说,获取数据的逻辑有些相同,有些则不同。我的问题是如何设计类来支持这一点。

这里有一些限制:

  1. 数据单例应该是单例,正如其名称所暗示的那样。
  2. 共享项目中的一些共享逻辑使用 DataSingleton,因此 DataSingleton 也必须位于共享类项目中(否则我会收到构建错误)。
  3. 我不想将特定于应用程序的逻辑放入共享项目中。

如果这是 C++,我将有 2 个不同的类名称 DataSingleton——每个应用程序中都有一个——然后让链接器连接正确的类。这两个类都可以继承一些公共(public)基类,以处理共享逻辑的代码共享。我可以用 Java 做类似的事情吗?

如果有帮助,我可以在应用程序启动时使用一些确定其行为的参数来“初始化”DataSingleton。我考虑过向它传递一个类,但该类无法访问 DataSingleton 的私有(private)成员。

执行此操作的“正确”方法是什么?

最佳答案

考虑一下单例。这个类做了 3 件事:1.有业务逻辑2.它创建自己的实例4. 它保存这个单一实例并提供对其的访问。

您想要保存您的类的多个实现。这意味着您需要接口(interface)和/或抽象基类以及几个具体类。但在这种情况下,最好的解决方案是将 #1 与 #2 和 #3 分开:创建 DataFetcher 的层次结构(很抱歉,我更改了您的名称 DataSingleton 因为它不再描述现实)和DataFetcherAccessor:

interface DataFetcher {}
class DataFetcher1 implements DataFetcher{}
class DataFetcher2 implements DataFetcher{}

class DataFetcherAccessor<A extends DataFetcher> {
private static A accessor;

public static void setImpl(Class<A> c) {
accessor = c.newInstance();
}

public static A getAccessor() [
return accessor;
}
}

显然还有很多其他解决方案。例如,您可以使用 SPI找到接口(interface)的可用实现。您还可以自己扫描类路径并发现接口(interface) DataFetcher 的可用实现或使用 Reflections为此。

关于java - 在项目之间共享单例逻辑,并针对每个项目进行修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22225084/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com