gpt4 book ai didi

java - 如何在Java/Android模块化库中使两个相关的包相互独立?

转载 作者:行者123 更新时间:2023-12-01 15:14:39 24 4
gpt4 key购买 nike

假设:
一个简单的模块化java库只有两个模块:

package com.mycorp.lib.logger;
public class LogcatLogger implements Logger {

@Override
public void out(LogcatLogger.LogMessage message){
Log.i("TAG", message.status);
}

...
}

package com.mycorp.lib.webservice;
public class JsonWebservice implements Webservice {

@Override
public void onErrorFound(String status) {
LogcatLogger.LogMessage message = new LogcatLogger.LogMessage();
message.status = status;
LogcatLogger.out(message);
}

...
}

问题:
如何使 com.mycorp.lib.webservicecom.mycorp.lib.logger 像这样独立? (客户端应用程序也可以调用方法) Target Design

注释:
我之前尝试过命令模式:
结果:api有很多方法,必须创建很多命令类

更新1:
添加了 LogMessage 作为 LogcatLogger 的嵌套静态类,以应对更具挑战性的情况

更新2:
添加了目标设计图像。

感谢任何帮助。

最佳答案

使用策略模式。基本上,让 LogcatLogger 实现一个自定义接口(interface),并在服务中引用该接口(interface)。

package com.mycorp.lib.invoker;
public interface Logger {
void out(Loggable message);
}

package com.mycorp.lib.invoker;
public interface Loggable {
void setStatus(String status);
String getStatus();
}

package com.mycorp.lib.invoker;
public class LoggableFactory {
public static Loggable createDatabaseLogMessage() { return new DatabaseLogMessage(); }
public static Loggable createWebserviceLogMessage() { return new WebserviceLogMessage(); }
}

package com.mycorp.lib.logger;
public class WebserviceLogMessage implements Logger {

@Override public void out(Loggable message){
Log.i("TAG", message.getStatus());
}

...
}

package com.mycorp.lib.logger;
public class DatabaseLogMessage implements Logger {
@Override public void out(Loggable message) {
Log.i("JDBC",message.getStatus());
otherFancyStuff(); // whatever ? :)
}
}

package com.mycorp.lib.webservice;
public class JsonWebservice implements Webservice {
Logger out;

JsonWebservice(Logger out) { this.out = out; }

@Override
public void onErrorFound(String status) {
Loggable message = LoggableFactory.createWebserviceLogMessage();
message.setStatus(status);
out.out(message);
}

...
}

关于java - 如何在Java/Android模块化库中使两个相关的包相互独立?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11801970/

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