Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 对象耦合_Design Patterns_Coupling_Cohesion - Fatal编程技术网

Design patterns 对象耦合

Design patterns 对象耦合,design-patterns,coupling,cohesion,Design Patterns,Coupling,Cohesion,假设我分别有类A、B和C的doA()、doB()和doC()方法 除非我错了,否则doA()方法应该属于类A。它必须从类A执行。如果对A负责的方法doA()存在于类B中,则类A耦合到B的服务。这也代表了低内聚和高耦合 我的推理正确吗?如果一个类的所有方法都对其所有成员变量进行操作,则该类具有最大的内聚性 public class MyClass { private int value1; private int value2; private int value3;

假设我分别有类A、B和C的doA()、doB()和doC()方法

除非我错了,否则doA()方法应该属于类A。它必须从类A执行。如果对A负责的方法doA()存在于类B中,则类A耦合到B的服务。这也代表了低内聚和高耦合


我的推理正确吗?

如果一个类的所有方法都对其所有成员变量进行操作,则该类具有最大的内聚性

public class MyClass
{
    private int value1;
    private int value2;
    private int value3;

    public int Method1()
    {
        return value1 + value2;
    }

    public int Method2()
    {
        return value1 - value2;
    }

    // doesn't belong on this class
    public int Method3()
    {
        return value3 * 2;
    }
}
耦合有两种形式:

  • 一个类在内部使用另一个类。这是耦合,但有点好,因为这是一个组合优于继承的例子
  • 例如:

    public class MyClass
    {
        public void Method1()
        {
            var c = new MyOtherClass();
            c.DoSomething();
        }
    }
    
    public class MyClass
    {
        public void Method1()
        {
            var c = new MyOtherClass();
            var size = c.Members.Size;
            ...
        }
    }
    
  • 更糟糕的耦合是这样的,通常被称为冲突
  • 例如:

    public class MyClass
    {
        public void Method1()
        {
            var c = new MyOtherClass();
            c.DoSomething();
        }
    }
    
    public class MyClass
    {
        public void Method1()
        {
            var c = new MyOtherClass();
            var size = c.Members.Size;
            ...
        }
    }
    

    在这种情况下,
    MyClass
    不仅与
    MyOtherClass
    相耦合,而且与
    MyOtherClass
    的结构相耦合,这就是你遇到麻烦的地方,你的代码变得僵硬而脆弱。

    告诉我们更多;doA()与类的关系实际上做了什么?它是创建A还是消费A或更新A还是什么?A类是信息专家。它是一个棋盘对象。doA()表示getSquare()方法。B类表示正方形对象。