如何构建许多类似事件的方法?

时间:2011-06-16 19:51:22

标签: events design-patterns class-design

我正在开发的系统的核心对象变得有点过于笨拙。问题在于它可以通过许多不同的方式起作用。你可以:

  • 取消
  • 拒绝
  • 弃掉它
  • 卖它
  • 拆分
  • 过期
  • ......还有更多。

我正在考虑将类似事件的方法从类中分解出来并使它更通用,比如Command模式。但是大多数方法都有不同的参数,所以使用像Run()Execute()这样的解决方案可能会成为一个问题吗?

任何想法如何构建它,使其更灵活,更简单地添加新命令,或操作或您想要调用它们? (因为没有听众,我不会称之为真实事件。)

2 个答案:

答案 0 :(得分:0)

您可以在构造函数中传递命令所需的参数吗?这样,您可以使用无参数命令。

class SellItCommand : ICommand {

  private decimal price;

  SellItCommand(decimal price) {
    this.price = price;
  }

  void Execute() {
    // Do whatever needs to be done with in the sell command using this.price
  }
}

答案 1 :(得分:0)

将参数封装为一个参数:

public class SellCommand: Command {
   Product OwnerProduct;

   ProductCommand (AOwnerProduct)
   {
     this.OwnerProduct = AOwnerProduct;
   }

   public override void Execute(KeyValueArray Parameters)
   {
      double Price = (double)Parameters.ValueofKey("price");
      // do something else
   }
}

public class BuyCommand: Command {
   Product OwnerProduct;

   ProductCommand (AOwnerProduct)
   {
     this.OwnerProduct = AOwnerProduct;
   }

   public override void Execute(KeyValueArray Parameters)
   {
      double Cost = (double)Parameters.ValueofKey("cost");
      // do something else
   }
}


public class Product {
   public void AnyMethod()
   {
     KeyValueArray Parameters =  new KeyValueArray Parameters();
     KeyValueArray.Add("price", "12.5");
   } 
}

它的伪代码,您可能希望使用与您的编程框架相匹配的集合库。