0

我需要抽象一些行为代码,并且在尝试引用调用这些行为的类中的对象时遇到问题,让我尝试解释一下:

我的“父”类有一个名为CurrentPage的属性。我也有一些行为逻辑,修改CurrentPage属性,目前这是写在同一个类中。我现在需要在很多地方重用这种行为,所以我想将它封装/抽象成一个单独的......呃......类?

我能感觉到可能有一种设计模式可以满足我的需求,但我不知道该使用哪一种。

有人可以帮忙吗??

谢谢,马克

(我正在使用 C#、Silverlight 和 MVVM。CurrentPage通知属性,而不是字段,因此不能作为ref类型传递到 Behavior 子类中)

更新:根据要求添加示例:

class MainApp
{
    public static string CurrentPage { get; set; }

    /// <summary>
    /// Entry point into console application.
    /// </summary>
    static void Main()
    {
        CurrentPage = "Default value";

        Console.WriteLine(CurrentPage);

        DoWork();

        Console.WriteLine(CurrentPage);

        Console.ReadLine();

    }


    private static void DoWork()
    {
        CurrentPage = "A new page";
    }

}

我正在尝试将 DoWork() 提取到一个单独的类中。

4

3 回答 3

3

将行为抽象到它自己的类中。然后委托给它。如果非要命名的话,我猜这就是“战略”模式。

例如:

class MainApp
{
    ...

    void DoWork()
    {
        CurrentPage = "A new page";
    }
}

最终可能像:

class PageModifier
{
    void ModifyCurrentPage(MainApp instance)
    {
        instance.CurrentPage = "A new page";
    }
}

class MainApp
{
    ...
    PageModifier _mod;

    void DoWork()
    {
        _mod.ModifyCurrentPage(this);
    }
}

现在您可以在任何地方使用 PageModifier,并且该行为被保存在一个位置。

于 2009-11-11T16:36:40.300 回答
1

不知道 c# 但这听起来可能适合接口定义。然而,这通常意味着忽略您希望定义的行为的实际实现。

于 2009-11-11T16:38:00.207 回答
1

将逻辑移动到其单独的类中,公开其相关方法并在需要时从初始类中调用它们。通常,服务方法将像参数一样作为初始类的实例。虽然我感觉这里不是直接讲设计模式,更多的是关于设计原则的,看看GoF的书;这将是值得的。

于 2009-11-11T17:07:26.327 回答