如何将行为移到单独的类中

本文关键字:单独 | 更新日期: 2023-09-27 18:04:16

我是设计模式的新手,我一直在努力找出如何将策略,装饰器或访问者模式应用于我的问题。

我有一个WPF MVVM对话框,用于捕获Letter文档信息。该表单包含以下内容:

  • 收件人联系人组
  • a发件人1联系人
  • a发件人2联系人
  • 一组CC联系人
  • BCC联系人组

我为上面的项目使用了3个用户控件,因为每个控件捕获的信息略有不同:

  • 发送者
  • CCs (bcc使用)

我有一个单独的Contact类,每个ViewModel捕获的信息略有不同。不同之处在于,收件人/抄送人有"多个联系人"行为,发件人/抄送人有"收藏联系人"行为。

目前我的逻辑是重复的,我正在努力使它更易于维护。

当我查看Strategy和Decorator模式时,超类包含了每个行为的信息。是否有可能只是"添加"行为的具体实现,而不添加到超类?

如何将行为移到单独的类中

您可以将行为"添加"到使用extension methods继承的具体类型中,具体取决于您需要添加的功能类型。

例如,假设您有一个名为MyConcreteClass的类,如下所示:
public class MyConcreteClass
{
   public string PropertyOne { get; set; }
   public void MethodOne { ... }
}

你可以创建一个单独的扩展类,它允许你在不修改原始实现的情况下添加功能。

namespace Extensions
{
    public static class MyConcreteClassExtensions
    {
        public static string MethodTwo(this MyConcreteClass concreteClass)
        {
               // add new implementation here
               return concreteClass.PropertyOne + " using extensions";
        }
    }
}

然后你可以简单地使用如下:

var c = new MyConcreteClass();
Console.WriteLine(c.MethodTwo());

更多信息,请看这里