こんにちは私は複合パターンで作業しています。この最初のデザインパターンの例を使って説明します。https://github.com/bethrobson/Head-First-Design-Patterns/tree/master/src/headfirst/designpatterns/composite/menuiterator複合パターン、多型を自動入力する方法は?
すべてのメニューとサブメニューには、識別するIDが10文字であるとします。 この
0100000000 menu_1
0101000000 menu_1's subMenu_1
0102000000 menu_1's subMenu_2
0102010000 subMenu_2's subMenu_3
0200000000 menu_2
のようなものと、私はランダムに持っていることは、メニュー項目があるが、それは、それが属するメニューIDでIDを持っています。例えば
0101000000 menuItem_1
0200000000 menuItem_2
だからMenuItemの1メニュー1のサブメニュー1に属し、MenuItemの2は、メニュー2.
それは次のようにコード化されるだろうに属します。
menu_1.add(subMenu_1);
subMenu_1.add(menuItem_1);
menu_2.add(menuItem_2);
ここでメニューをどのように埋めますか?
私がMenuItemsだけを取得しているために何をしているのか、私はIDがそれが所属する場所を特定するためにカットしています。 たとえば、メニュー1(0100000000)とメニュー2(0200000000)という2つのメニューがあるので、最初の2つの文字列を切り捨てる必要があります。
私はこのようにコーディングしています:
class AllMenus implements MenuComponent {
MenuComponent menu_1
MenuComponent subMenu_1
MenuComponent subMenu_2
MenuComponent subMenu_3
MenuComponent menu_2
@Override
add(MenuComponent menu) {
if(menu instanceof Menu) {
super.add(menu)
} else if(menu instanceof MenuItem) {
String subId = menuItem.getId().subString(0,2)
if(subId.equals("01")) {
if(menu_1 == null) {
menu_1 = new Menu();
add(menu_1);
}
subId = menuItem.getId().subString(0,4);
if(subId.equals("0101")) {
if(subMenu_1 == null) {
subMenu_1 = new Menu();
menu_1.add(subMenu_1);
}
subMenu_1.add(menuItem);
} else if(subId.equals("0102")) {
if(subMenu_2 == null) {
subMenu_2 = new Menu();
menu_1.add(subMenu_2);
}
subId = menuItem.getId().subString(0,6);
if(subId.equals("010201")) {
if(subMenu_3 == null) {
subMenu_3 = new Menu();
subMenu_2.add(subMenu_3);
}
subMenu_3.add(menuItem);
}
}
} else if(subId.equals("02") {
if(menu_2 == null) {
menu_2 = new Menu();
add(menu_2);
}
menu_2.add(menuItem);
}
}
}
}
これは私が得るすべてのMenuItemのためのものです。ですから、このコードは長い間、4つのメニューのために見ることができますが、何千ものメニューを想像してください。 私は多型を繰り返すものに使うべきだと読んだことがありますが、私はこの場合どのようにしているのか分かりません。
大文字で始まる変数名を指定すると、Javaの人が本当に混乱します。 'NamesStartingWithACapital'はクラス名のために予約されています。これを修正することをお勧めします。頭痛を冒さずにコードを見ることができれば、答えを得る可能性が高くなります。 – slim
また、10桁の数字がどのように解釈されるべきかをさらに詳しく説明できますか?私はパターンが見えないと確信しています。 – slim
@slimこんにちはパターンは、私はadd()メソッドを使用しています。その背後には反復子があり、MenuItemとMenuはMenuComponentを実装しています。十桁数字はmenuItemが属する場所です。メニュー項目は定数ですが、メニュー項目ではありませんが、subStringを使用してどこに属しているかを判断するためにmenuItemをいくつかのmenu.edited変数に追加する必要がある方法を判断してください – MarioK17