[edit] 嗯,显然我并没有正确地问这个问题。你能告诉我为什么这是一个糟糕的问题吗?
换句话说,我想找到一个原因,将this article中定义的内容实现为“纯对象聚合”而不是“将对象组织为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的聚合模式?