序列设计模式中的过程

时间:2015-08-21 20:42:23

标签: java c# oop design-patterns

情境:
我有一些方法可以处理某种工作流程的某些步骤。每个方法在对象中执行某些操作,并将同一对象传递给另一个方法。这样的事情:

void MethodA(SomeType obj)
{
    // Some Process

    MethodB(obj);
}

void MethodB(SomeType obj)
{
    // Some Process

    MethodC(obj);
}

void MethodC(SomeType obj)
{
    // keep going...
}

并发症:
系统正在增长,我注意到我需要在系统的某些不同位置调用这个“步骤队列”。但是对于其他地方,一些步骤会发生变化,有些步骤无法执行,需要执行新步骤。通常,队列会更改,但步骤不会更改。

问题
是否有一个设计模式,允许我建立分开的步骤,并在我需要运行时加入它们?

2 个答案:

答案 0 :(得分:2)

不确定设计模式,但您可以按照以下方式实现:

void Method(SomeType obj)
{
    MethodA(obj);
    MethodB(obj);
    MethodC(obj);
}

void MethodA(SomeType obj)
{
}

void MethodB(SomeType obj)
{
}

void MethodC(SomeType obj)
{
}

通过这种方式,您可以随时随地重新安排这些方法。

答案 1 :(得分:2)

您可以使用 Builder 模式:

public class MyObject {

    public static class MyObjectBuilder {
        private MyObject obj;
        public MyObjectBuilder() {
            obj = new MyObject();
        }

        public MyObjectBuilder methodA() {
            // edit something with obj
            return this;
        }

        public MyObjectBuilder methodB() {
            // edit something with obj
            return this;
        }

        public MyObjectBuilder methodC() {
            // edit something with obj
            return this;
        }

        public MyObject build() {
            return obj;
        }
    }

    public static void main(String[] args) {
        MyObject a = new MyObjectBuilder()
                .methodA()
                .methodB()
                .methodC().build();
        MyObject b = new MyObjectBuilder()
                .methodA()
                .methodA()
                .methodB()
                .methodB().build();
        MyObject c = new MyObjectBuilder()
                .methodC()
                .methodB()
                .methodA()
                .methodC()
                .methodB().build();
    }
}