java - 多平台 HTTP 使用哪些设计模式元素?

标签 java oop design-patterns module polymorphism

我正在设计一个使用异步 HTTP 下载的应用程序。我希望这个应用程序可以在 Android、Windows 桌面和 Mac OS 桌面上运行,这就是我用 Java 开发它并尝试使其非常模块化的原因。

enter image description here

(为清楚起见进行编辑,我使用的库是 AsyncHttpClientAndroid-Async-Http )

我已经有了处理下载的库,但问题是无论使用什么库,CORE 模块中的特定方法都必须能够执行下载功能。关于该怎么做,我有两个想法。

  • 想法 1:在 CORE 中放置一个名为 GenericDownloader 的抽象类,并使用 AndroidDownloader 等类在特定应用中扩展它。
  • 思路二:在CORE中放置一个名为DownloadInterface的接口(interface),在具体应用中实现,方法与思路一类似。

这两种思路的问题是我无法实例化抽象类或接口(interface),那么我如何在CORE中实现功能呢?

我还能如何解决这个问题?

最佳答案

首先,是使用接口(interface)还是抽象基类是核心是否能够并且应该为下载器的实现提供功能的问题。如果不能或不应该,请不要使用抽象基类。优先使用接口(interface)而不是抽象基类。即使可以,也请考虑提供一个单独的类来提供实现可以使用的功能。封装优于继承。

您的具体问题的答案是“视情况而定”。一般来说,您需要某种方式来告知核心在运行时可用的实现。

根据您打包事物的方式,它可能就像在核心中使用加载器工厂方法一样简单,该方法依次使用 Class.forName() 查找每个实现,直到找到一个;这假设您将一个实现与每个分布式 JAR 打包在一起。

否则,它可能会在某处使用配置条目来指定实现的类名;再次使用反射来查找类。

否则,您可以使用反射并搜索类路径以查找实现您的接口(interface)的类。

否则,您可以使用 java.net.URLClassLoader 动态创建类路径并使用它动态加载类。

关于java - 多平台 HTTP 使用哪些设计模式元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13705935/

相关文章:

java - 从 groovy 调用 java 代码的问题

java - 同时突出显示多个 EditText 控件中的文本

c# - 带有 "this"关键字的接口(interface)成员

php - 在接口(interface)实现中覆盖参数类型

java - 翻译层的设计

java - 计算余弦相似度spark java

java - BufferedReader 无法读取长行

java - 使用同一个类的方法修改数组

java - 工厂方法,为什么我们使用静态调用从工厂获取对象

java - GWT 序列化和装饰器模式