gpt4 book ai didi

java - 在运行时更改数据类型实例的正确设计模式

转载 作者:太空宇宙 更新时间:2023-11-04 07:01:49 25 4
gpt4 key购买 nike

我一直在考虑使用generic factory pattern为此,我只是想确保我正确使用它。

首先,由于客户需求,这必须是基于 Java 的。

我的应用程序可以实例化多个对象,并且每个对象都应该能够在运行时更改类型。例如,变量可以从 float 开始,转换为 int,然后转换为 char,最后转换回 float 。这将是一个基本示例,但是可以添加自定义数据类型以获得额外的乐趣。

在这种情况下使用通用工厂模式是否正确?或者,还有更好的吗?对我来说,工厂模式似乎更擅长实例化而不是更新(除非我基本上销毁并重新实例化了变量)。

<小时/>

更多细节:

这是一种进化算法,程序启动时我不一定知道类型。根据进化的方式,它可能会发现 int 比 float 更可取。

例如,如果我从浮点值 4.34 开始:

// start of program
object var = 4.34;

// evolution running......
...

// evolution determines that var would be better as a float
var.convertToInt();

// var is now an int with a value of 4

我最初的想法是拥有一个通用工厂类型对象,在其中跟踪对象的当前“类型”并返回适当的值。因此,一开始它将返回一个 float,转换后将返回 int 转换后的值(映射到内部 int)。

<小时/>

编辑 2:代码澄清。

我想我的观点没有得到充分体现。这是我期望看到的代码示例。

object var = new object(int, 4);    // create int variable with value of 4
// where object is whatever base design pattern i am using here
...
var.toFloat(); // convert var to float, value is now 4.0
System.out.println(var.getValue()); // prints 4.0
...
var.toCustomClass(); // var is now a custom datatype
System.out.println(var.getValue()); // calls the print method of the class

我还应该提到,var 的实例需要在整个执行过程中保持不变,因为它是我的进化算法中的一个对象,不能被销毁并重新实例化为其他东西。

最佳答案

如果您解释为什么要这样做可能会有所帮助。根据您到目前为止所说的,您最好的选择就是始终使用类型作为 Number,然后存储您需要的任何版本。例如number.toIntnumber.toDouble

对于更复杂的类型,定义一个通用接口(interface),它们都实现并使用该接口(interface)存储它们,然后编写适当的映射方法或使用 Dozer 等库来为您进行映射。

您将需要创建自己的类来处理这个问题。例如:

public class Value {
Object value;

Object getValue();


void toInteger() {
if (value instanceof Number) {
value = Integer.valueOf(((Number)value).intValue());
} else {
// Handle the conversion however you handle it
}
}
}

关于java - 在运行时更改数据类型实例的正确设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22000651/

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