我正在开发一个图像编辑器应用程序,以便哪种方法更适合下面提到的类设计?三个中的任何一个或任何新的?
第一
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){}
}
请讨论这两种方法的利弊。
答案 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)
最好将数据对象与操作对象分开。这将允许您创建操作对象的不同实现,并允许进行模拟,这有助于单元测试。
您也应该为类创建接口,并尽可能在类方法的签名中使用它们。类应避免直接引用其他类。相反,将依赖项传递给构造函数,构造函数接受接口。这称为依赖注入。