Design patterns 行为逻辑的抽象-是否存在设计模式?

Design patterns 行为逻辑的抽象-是否存在设计模式?,design-patterns,encapsulation,abstraction,Design Patterns,Encapsulation,Abstraction,我需要抽象一些行为代码,在尝试引用调用这些行为的类中的对象时遇到问题,让我尝试解释一下: 我的“父”类有一个名为CurrentPage的属性。我还有一些行为逻辑,它修改了CurrentPage属性,目前这是在同一个类中编写的。我现在需要在很多地方重用这种行为,所以我想把它封装/抽象成一个单独的。。。嗯。。。班级 我能感觉到可能有一种设计模式可以满足我的需求,但我不知道该使用哪一种 外面有人能帮忙吗 谢谢, 标记 (我正在使用C#、Silverlight和MVVM。CurrentPage是通知属性

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

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

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

外面有人能帮忙吗

谢谢, 标记

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

更新:根据要求添加的示例:
class MainApp
{
公共静态字符串CurrentPage{get;set;}
/// 
///进入控制台应用程序的入口点。
/// 
静态void Main()
{
CurrentPage=“默认值”;
Console.WriteLine(当前页);
销钉();
Console.WriteLine(当前页);
Console.ReadLine();
}
私有静态void DoWork()
{
CurrentPage=“新页面”;
}
}

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

将行为抽象到它自己的类中。然后授权给它。如果你不得不说出它的名字,我想这就是“战略”模式

例如:

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,而行为保留在一个位置。

将行为抽象到自己的类中。然后授权给它。如果你不得不说出它的名字,我想这就是“战略”模式

例如:

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,并且行为保持在一个位置。

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

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

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

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

你能补充一些关于这方面的信息吗?任何数量的模式都可以用来解决这个问题,因为它非常模糊。我正在尝试提取DoWork()方法。我修改了我的答案以使用您的示例名称。这对你有意义吗?你能补充一些关于这个的信息吗?任何数量的模式都可以用来解决这个问题,因为它非常模糊。我正在尝试提取DoWork()方法。我修改了我的答案以使用您的示例名称。这对你有意义吗?谢谢你的更新。这要求在ModifyCurrentPage方法中将MainApp的实例和作为参数。如果我想从另一个类触发此行为,您会建议使用多态ModifyCurrentPage方法,还是MainApp继承的超类?这取决于执行“ModifyCurrentPage”工作实际需要什么。如果您计划对多个类实例使用此方法,那么是的,您希望使用多态方法。我建议在创建超类之前使用接口获取多态性。另一方面,如果您在本例中并不真正需要所有上下文“MainApp”提供,那么您可能不需要它的实例来执行工作。如果这是真的,则将所需信息作为参数传递,并从方法返回“ModifiedPage”。如果有人要求,我会在我的回答中包括这个场景。谢谢更新。这要求在ModifyCurrentPage方法中将MainApp的实例和作为参数。如果我想从另一个类触发此行为,您会建议使用多态ModifyCurrentPage方法,还是MainApp继承的超类?这取决于执行“ModifyCurrentPage”工作实际需要什么。如果您计划对多个类实例使用此方法,那么是的,您希望使用多态方法。我建议在创建超类之前使用接口获取多态性。另一方面,如果您在本例中并不真正需要所有上下文“MainApp”提供,那么您可能不需要它的实例来执行工作。如果这是真的,则将所需信息作为参数传递,并从方法返回“ModifiedPage”。如果有人要求,我会在我的回答中包括这个场景。