gpt4 book ai didi

java - 常量类的接口(interface)模式

转载 作者:行者123 更新时间:2023-12-01 11:14:53 26 4
gpt4 key购买 nike

我正在开发一个必须从屏幕读取某些数据的应用程序,为此,我使用常量类来指定屏幕中数据的位置。例如,一个包含信息的变量如下所示:

//Square of 100x15 px containing the name of the current user
public static final int[] USERNAME = {1157, 700, 100, 15};
//Squares for the five 16x23 numbers common to all players
private static final int[][] COMMON_NUMBERS = {
{426, 230, 16, 23},
{514, 230, 16, 23},
{601, 230, 16, 23},
{688, 230, 16, 23},
{775, 230, 16, 23}};

此类的使用示例如下:

BufferedImage username = screenshot.getSubimage(Constants.USERNAME[0], Constants.USERNAME[1], Constants.USERNAME[2], Constants.USERNAME[3]);

到目前为止,一切都很好,但现在我需要更多代表相同事物但屏幕分辨率不同的常量。我无法乘以屏幕分辨率的比率,因为某些元素的位置略有不同,有时读数不正确。
我想知道是否有一个适合这种情况的漂亮而干净的设计模式可以使用,因为我并不完全相信我想到的不同选项:

  • 添加分辨率作为变量的新维度,例如上面的示例将如下所示:

public static final int[][] USERNAME = {{1157, 700, 100, 15},{1100, 650, 100, 15}};

我需要使用这些常量发送有关每个类的分辨率的信息。另外,当添加更多不同的分辨率时,这个类将变得非常大。

  • 使用包含所有属性 getter 的接口(interface),例如:

int[] getUsername();
int[][] getCommonNumbers();

然后,对于每个分辨率,我都会实现这个接口(interface),并且每当我的应用程序启动时,我都会使用 spring 设置正确的实现。

  • 使用中间类而不是接口(interface),它将包含有关要使用的解析的信息,将包含与先前接口(interface)一样的所有方法,并将从正确的常量文件返回属性。这可以通过手动实现所有方法或使用 java 反射来完成,以便一个中央方法可以处理所有调用。这样,每当我想使用常量时,我​​都会调用中间类。

我想知道什么是解决这个问题的好设计,因为我并不完全相信这些解决方案。有一些设计模式吗?
我正在阅读有关 Constant 接口(interface)的内容,但我不确定如何在这里应用它。

最佳答案

对我来说,这看起来不像常数。看起来更像是配置。常数是永远改变的东西。在这种情况下,组件的确切位置可能会随着时间的推移而修改。

您应该提取一个类似于以下内容的类:

class ComponentPositions {
Rectangle getUsernamePosition();
Set<Rectangle> getCommonNumbersPositions();
[...]
}

您可以拥有此类的多个具有不同值的实例。将值加载到此类中是您必须解决的另一个问题,但您可以引入一个能够加载该配置的不同实例的工厂(可能称为 ComponentPositionConfiguration )。

关于java - 常量类的接口(interface)模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31961166/

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