将单独的实体组合在一起使得它们不紧密耦合

时间:2016-01-30 20:13:23

标签: java oop design-patterns abstraction

我正在启动一个创建过程的过程,该过程进一步分为4个步骤,每个步骤代表一个类,我通过考虑单一责任原则将所有4个步骤分开。每个类由set get方法组成。到目前为止,我的代码是

public class manipulator{

private A a;
private B b;
private C c;
private D d;

public manipulator(){
a= new A();
b= new B();
c= new C();
d= new D();
}
//getters and setters of all 4steps
}

操纵器是包含所有4个步骤的主类,构造函数中的每个步骤都是进一步启动但我认为这是紧耦合系统,因为有启动内部构造函数。我应该如何在其中使用接口来提供抽象并使其松散耦合。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

它可能是这样的(我不确定你使用的编程语言,所以把它当作伪代码):

class Manipulator {

    private List steps;

    public manipulator() {
        this->steps = new List();
    }

    public add(Step step) {
        this->steps->append(step);
        return this; // you can chain add() calls
    }

    public run() {
        foreach (step in this->steps) {
            step->run();
        }
    }

}

这里有一个适合您步骤的数组,您不依赖于A,B,C,D类。你不要仅限于4步。

这些步骤本身应该有一个基类或接口,很可能它们总是有很多常见的东西:

class Step { // or abstract class Step or interface Step

    public run() {
    }
}

class StepA extends Step { ... }

class StepB extends Step { ... }

class StepC extends Step { ... }

class StepD extends Step { ... }

现在,您可以使用以下步骤配置操纵器:

manipulator = new Manipulator()
manipluator->add(new StepA())->add(new StepB())->add(new StepC())->add(new StepD())
manipulator->run()

需要考虑的其他几点:

  • "所有4步的吸气剂和制定者" - 很可能你不需要它们,一般来说,一切都有吸气剂/安装者是不好的。搜索"why getters and setters are bad"
  • 之类的内容
  • 查看此帖子,"Your coding conventions are hurting you",有类似"操纵员"可能不是最好的主意(虽然我不知道细节,所以我可能会弄错)