哪种 OO 设计更好,为什么?

Which OO Design is better and why?

我正在开发一个图像编辑器应用程序,下面提到的 class 设计哪种方法更好?三个中的任何一个或任何新的?

第一个

class Image{

    string path

    rotateLeft(){};
    rotateRight(){};
    changeBrightness(){};

}

或第二

class Image{

    string path

}

Image image = new Image();

Class Editor{

    rotateLeft(Image image){}
    rotateRight(Image image){}
    changeBrightness(Image image){}
}

或第三

Interface Operation{

    rotateLeft(Image image);
    rotateRight(Image image);
    changeBrightness(Image image);

}

class Image Implements Operation{

    string path;
    rotateLeft(this){}
    rotateRight(this){}
    changeBrightness(this){}

}

请讨论这两种方法的优缺点。

最好将数据对象与操作对象分开。这将允许您创建操作对象的不同实现,并且还允许进行有助于单元测试的模拟。

您还应该为 classes 创建接口,并尽可能在 class 方法的签名中使用它们。 类 应避免直接引用其他 class。相反,将依赖项传递到采用接口的构造函数中。这就是所谓的依赖注入。

在我看来,我认为您可以在单一职责原则 (RSP) 方面走得更远。但我不太确定它是否与为编辑器制作界面有关。

class Image{
  string path
}

Image image = new Image();

interface Rotatory {
  rotate(image);
}

class RightRotator implements Rotatory{
  rotate(image){
  /*Your implementation*/
  }
}

class LeftRotator implements Rotatory{
  rotate(image){
  /*Your implementation*/
  }
}

interface Editor{
  change(image);
}

class Brightness implements Editor{
  change(image){
  /*Your implementation*/
  }
}