我对一个想法的概念仍然有些麻烦。
问题是,这需要创建一个类A,它可以改变它的属性和方法,可以动态地改变系统配置。
简单地说,我可以使用属性X,Y的类“A1”,只使用add方法,使用X,Y,Z的另一个类“A2”以及方法加减。并且可能会将它们放在系统中。
但是我们的想法是,类A“A”或更好的类A的对象可以动态地改变为两个recebebdo中的一个方法。
我考虑过使用策略模式,因为我可以动态更改,但是我坚持了无法动态添加的功能,而且我读了一些关于抽象工厂和工厂模式的内容,它“几乎”满足了我的需求。但我认为这是因为我的例子不是很清楚。
我想象的是,这个班级将是他们自己的抽象工厂,但这仍然让我怀疑和他们的新方法。
它不是针对特定的语言,而是我的思维和系统的易用性,而无需在代码中管理和使用多个类,它将是实际类的接口。
最大的问题是:有可能吗?我该怎么办?
例:
class System
{
setConfig(Config.VALUE);
}
class A
{
if(system.config == Config.A1)
{
this.handleClass = new A1();
}
else
{
this.handleClass = new A2();
}
}
class A1
{
add(value:float);
}
class A1
{
subtract(value:float);
}
main
{
System system.setConfig(Config.A);
A foo = new A();
A.add() // because the add method belongs to class A1;
System system.setConfig(Config.B);
A.subtract() // because the add method belongs to class A2;
}
答案 0 :(得分:0)
语言不明显。在大多数语言(C ++,C#,Java)中,您将返回特定类型;即使这是“通用”类型,如 void * 或对象,您通常必须知道在编译时可以和不能调用哪些方法。解决方法是可行的,但在您的情况下,可能不需要它们。
我认为做需要的是工厂或抽象工厂模式。您必须弄清楚所有可能情况的通用接口是什么(因为如果函数可以返回int或数组,则无法添加返回值,也无法获取其元素)并在不同的类中实现此接口。然后,无论何时需要创建接口实例,都要求Factory执行此操作,而Factory选择它应该是哪个类。
interface ISampleValues{
public abstract int NumberOfValues();
public abstract int SpecificValue(int index);
}
class SingleValue : ISampleValues {
private int m_value;
public SingleValue(int val) {m_value = val;}
public override int NumberOfValues() {return 1;}
public override int SpecificValue(int index) {return m_value;}
}
class ArrayOfValues : ISampleValues {
private int[] m_values;
public ArrayOfValues(int[] arr) {m_values = arr.Clone();}
public override int NumberOfValues() {return m_values.Length;}
public override int SpecificValue(int index) {return m_values[index];}
}
class ValuesFabric {
public ISampleValues GetValues() {
if(System.Config.Multiple)
return new ArrayOfValues(System.Config.ValuesArray);
else
return new SingleValue(System.Config.ValuesArray[0]);
}
}