[编辑]嗯,显然我没有正确地问这个问题。你能告诉我为什么这是一个不好的问题吗?
换一种说法,我想找到一个为什么要实现本文中定义为“纯对象聚合”而不是“对象组织为 blob”的内容。
我第一次尝试在 Java 中实现聚合模式。
乍一看,接口似乎是答案,当我需要属性的默认值时,我遇到了困惑。
由于常量是静态的,如果我在接口中定义任何东西,它将与实现它的每个类共享。我想要的是,我只需要在我想要一个与默认值不同的值时才需要实现它。
在这里,抽象类似乎更合适,但我又回到了多重继承问题。
这是我可以使用的(不可能的)骨架:
public interface MenuItemPopup {
// Defaults
int windowHeight = 200;
int windowWidth = 350;
public void open();
public void setWindowHeight(int newHeight){
windowHeight = newHeight;
}
public void setWindowWidth(int newWidth){
windowWidth = newWidth;
}
}
public interface WindowButton {
// Defaults
Point size = new Point (5, 120);
public void initialize();
public void setSize(Point newSize){
size = newSize;
}
}
public class SomeFuncGUI extends MandatoryParentClass implements WindowButton, MenuItemPopup{
public void open(){
// do stuff
}
public void initialize(){
// do more stuff
}
}
public class OtherFuncGUI extends MandatoryParentClass implements MenuItemPopup{
public OtherFuncGUI(Point customPosition){
setSize(new Point(45, 92));
}
public void open(){
// do stuff
}
}
public class MainClass{
ArrayList <MandatoryParentClass> list = new ArrayList <MandatoryParentClass>();
list.add(new SomeFuncGUI());
list.add(new OtherFuncGUI());
for( MandatoryParentClass button : list){
// process buttons
if(button instanceof WindowButton){
button.open();
}
// process popups
if(button instanceof MenuItemPopup){
button.initialize();
}
}
}
我意识到这不会编译。
我将如何更改它以实现 MenuItemPopup 和 WindowButton 的聚合模式?