【问题标题】:Combine separate entities in one such that they are not tightly coupled将单独的实体合二为一,使它们不紧密耦合
【发布时间】:2016-05-08 11:47:17
【问题描述】:

我正在启动一个过程来创建一个过程,该过程进一步分为 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
}

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

任何帮助将不胜感激。

【问题讨论】:

    标签: java oop design-patterns abstraction


    【解决方案1】:

    可能是这样的(我不确定您使用的是哪种编程语言,所以将其视为伪代码):

    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()
    

    还有几点需要考虑:

    【讨论】:

    • @Boris Serebov 说得好。但是我应该如何将所有这些步骤组合到一个界面中,以便我在操纵器中注入界面,并且当我想要获得 stepA 时,它应该像 Istep、getStepA() 等等等。我对此感到非常困惑,请在这方面帮助我
    • @Mark 我不确定我是否理解你的问题。我的示例中的Manipulator 结合了这些步骤,它在this->steps 中有它们的列表,因此它可以访问任何步骤。根据您的评论,您似乎想要在这里再上一堂课,一些 StepsCollection,因此您可以将步骤添加到集合中,然后将集合传递给您的操纵器。在这种情况下,您只需将我的示例中的 Manipulator 重命名为 StepsCollection 并添加另一个将包含集合的 Manipulator 类。如果这不是您想要的,请使用更多详细信息和代码示例更新您的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 2011-05-24
    • 2018-11-19
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多