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

时间:2015-02-06 15:48:52

标签: oop class-design

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

第一

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){}

}

请讨论这两种方法的利弊。

2 个答案:

答案 0 :(得分:1)

在我看来,我认为你可以在单一责任原则(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*/
  }
}

答案 1 :(得分:0)

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

您也应该为类创建接口,并尽可能在类方法的签名中使用它们。类应避免直接引用其他类。相反,将依赖项传递给构造函数,构造函数接受接口。这称为依赖注入。