gpt4 book ai didi

java - 面向对象结构设计

转载 作者:行者123 更新时间:2023-11-30 04:37:24 24 4
gpt4 key购买 nike

我尝试设计“网络连接”以方便地从服务器检索数据。但是,我面临一个设计问题。

我要使用的NetworkUtil类被设计为

class NetworkUtil
public NetworkUtil(URL, resultType); // resultType might be XML or RAW
public setListener(listener); // listener will notice when result has arrive
public addPostData(key, value);
public connect(); // connect start new thread, so result will shown in listener

interface NetworkUtilListener1
public onNetworkFail();
public onNetworkSuccess(URL, resultType, xml, raw);

interface NetworkUtilListener2
public onNetworkFail();
public onNetworkSuccessRAW(URL, resultType, raw);
public onNetworkSuccessXML(URL, resultType, xml);

结果到达后,我将检查 resultType 并使用该参数的结果。然而,在上面显示的 2 个示例(NetworkUtilListener1NetworkUtilListener2)中,我考虑了当更多 resultType 出现(例如 JSON、图像)时将来使用的问题甚至是我的自定义类型,以便我的团队可以轻松使用它。

NetworkUtilListener1 将具有长期未使用的参数,例如

onNetworkSuccess(URL, resultType, raw, xml, json, image);

这不像我想象的那样是一个好的设计。

NetworkUtilListener2 将强制使用它的具体类拥有大量空方法,因为大多数时候我们只喜欢每个项目中的 1 或 2 种类型的结果。

onNetworkSuccessRAW(URL, resultType, raw);
onNetworkSuccessXML(URL, resultType, xml);
onNetworkSuccessJSON(URL, resultType, json);
onNetworkSuccessImage(URL, resultType, image);

任何人都可以给我一些重新设计这个类结构的帮助,或者推荐我需要关注的设计模式。这样我就可以拥有更好的NetworkListener

最佳答案

不要接收类型和结果,而是使用多态性:

public interface Result { ... }

public class XmlResult implements Result { ... }

将来您可以根据需要添加任意数量。

public class JSonResult implements Result { ... }

最后你就会看到这个界面

interface NetworkUtilListener1
public onNetworkFail();
public onNetworkSuccess(URL, result);

关于java - 面向对象结构设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13150219/

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