简体   繁体   中英

Decorating a static class C#

I've got a design question.

I've got a static class used in some old code that calls a static method to run some operation. If a certain condition is met, I want to call another method right after it.

I wanted to use the decorator pattern but I can't exactly return an instance of the static class if the condition is not met.

This is what's happening now.

var result = StaticClass.DoSomething(some parameters);

What I want is to write to a database right after that DoSomething is called if another variable is true and I didn't want to just pile on to the old code with conditionals so I'd rather delegate that to some other class. This is what I really want to do.

var result = StaticClassFactory(condition).DoSomething(some parameters);

Class1
void DoSomething(parameters) {
StaticClass.DoSomething()
}

Class2
void DoSomething(parameters) {
StaticClass.DoSomething();
DoSomethignElse();
}

Any suggestions?

What you can do is use an interface to represent the "doer":

public interface IDoer
{
    void DoSomething(object parameters);
}

Then create the two classes:

public class DefaultDoer : IDoer
{
    public void DoSomething(object parameters) 
    {
        StaticClass.DoSomething(object parameters);
    }
}

public class AugmentedDoer : IDoer
{
    public void DoSomething(object parameters) 
    {
        StaticClass.DoSomething(object parameters);
        DoSomethingElse();
    }
}

Then use a factory to return an instance that implements IDoer based on the condition:

public class DoerFactory
{
    public IDoer GetDoer(object someCondition)
    {
        //Determine which instance to create and return it here
    }
}

I used placeholders of type object for some things as no more information is available.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM