[編集]うーん、明らかに私はこれをきちんと求めていません。なぜこれが悪い質問なのか教えていただけますか?
別の言い方をすれば、この記事で「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の集約パターンを実装するためにこれをどのように変更しますか?