0

我对我的想法的概念仍然有些麻烦。

问题是这想要创建一个类 A,它可以改变它的属性和方法,除了系统配置,它可以动态改变。

简单地说,我可以有一个具有属性 X、Y 并且仅具有 add 方法的类“A1”和另一个具有 X、Y、Z 和方法加法和减法的类“A2”。并且可能会将它们包含在系统中。

但想法是类“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;

 }
4

1 回答 1

0

语言不明显。在大多数语言(C++、C#、Java)中,您要返回特定类型;即使这是像void*object这样的“通用”类型,您通常也必须知道在编译时可以调用和不能调用它的哪些方法。解决方法是可能的,但在您的情况下,它们可能不需要。

我想你需要的是工厂或抽象工厂模式。您必须弄清楚所有可能情况的通用接口是什么(因为如果函数可以返回 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]);
  }
}
于 2013-10-29T07:01:14.683 回答