我必须使用在特定屏幕位置绘制图片的GUI元素。 如果用户选择此图片,则在图像周围绘制边框。 现在我们想要包含另一个边框,用于标识具有特定用户值的图片。
目前,如果元素被选中,则会查看其内部状态,然后决定如何绘制自己。
graphic.drawImage(icon, x, y, null);
if (selected) {
drawBorder();
}
我不喜欢在此绘图方法中添加另一个if else的想法。 我想过创建一个继承元素行为的新类并覆盖draw方法,但这意味着在每个继承的类中复制整个选定的代码。 有没有很好的可能性,所以在不创建子类的情况下解决这个问题?
答案 0 :(得分:1)
由于您使用设计模式对其进行了标记,并且您似乎在寻找面向模式的方法,因此我建议您查看state pattern。维基百科页面上的示例甚至提到在绘制GUI时保持状态。不幸的是,这意味着你必须创建另一个带有子类和重写方法的类。
这可能会发生变化吗?即你是否真实地认为你将在绘图中添加新的行为(例如,如果用户双击,绘制不同类型的边框;如果用户右键单击,更改边框的颜色),或者是这样吗?如果你看到更多的行为被添加,我认为继续前进并采取更多的OO方法是明智的。如果只是这两种情况,我只想添加else if
语句。
答案 1 :(得分:0)
你对if-else有什么看法?
为所选项目创建一个全新的对象比检查绘图函数中的标志更不合理。
答案 2 :(得分:0)
一种可能性是允许你的drawBorder()方法获取参数:
private void drawBorder(boolean isSelected, boolean hasSpecialValue);
此方法可以确定要绘制的边框类型。