为现有控制设计新功能

时间:2012-07-23 17:06:09

标签: c# .net design-patterns decorator

人,

我需要建议......我想在网格视图中实现“添加新项目”,并从同一网格中“删除所选项目”,例如Add(IEnumerable newItems)。

我不想实现派生的网格视图类,因为我寻找灵活的解决方案而不与网格有很强的关系。

我正在研究在我的案例中使用'Decorator'模式,但我无法设计它:装饰器可以包含/聚合网格视图(这不是问题),但装饰器和网格视图没有通用接口 - 即'添加新项目是新功能,网格视图没有。 我可以在网格视图中实现空的“添加”方法并将其包装在装饰器中(作为替代方式)。

无论如何,我很乐意设计好的解决方案:)

2 个答案:

答案 0 :(得分:1)

visitor pattern似乎非常适合您的问题。

  

它表示要对对象的元素执行的操作   结构体。访问者允许您定义新操作而无需更改   它运作的元素的类。

答案 1 :(得分:0)

我认为最简单的方法是扩展方法:

public static class GridViewExtensions
{
   public static void RemoveSelectedItems(this GridView grid)
   {
      // implementation goes here
   }

   public static void Add<T>(this GridView grid, IEnumerable<T> items)
   {
      // implementation goes here
   }
}

用法甚至比装饰的GridView更简单 - 你不需要创建装饰器,只需使用序数GridView:

gridView.RemoveSelectedItems();

使用Decorator,您必须实现修饰对象的所有公共接口并将调用转移给它。这对GridView来说是很多工作。

更新:另一种解决方案 - 只需从GridView继承并将您的方法添加到派生类。使用CustomGridView而不是GridView。