5.3.3 封装菜单结构

通过分析上面那段JSON格式的菜单结构,我们可以将按钮(菜单项)对象归为3类:click类型的按钮、view类型的按钮和复合类型的按钮。


注意 请不要将按钮的类型与按钮对象的归类搞混。按钮的类型只有click和view两种,而按钮对象的归类仅仅是笔者为了封装对象而做的划分。


每个按钮对象都有一个共同的name属性,因此需要定义一个按钮对象的基类,所有的按钮对象都需要继承该类。基类代码如下所示:

  1. /**
  2. * 按钮的基类
  3. *
  4. * @author liufeng
  5. * @date 2013-10-14
  6. */
  7. public class Button {
  8. private String name;
  9.  
  10. public String getName() {
  11. return name;
  12. }
  13.  
  14. public void setName(String name) {
  15. this.name = name;
  16. }
  17. }

1)click类型的按钮有type、name和key3个属性,对应的类代码如下:

  1. /**
  2. * click类型的按钮
  3. *
  4. * @author liufeng
  5. * @date 2013-10-14
  6. */
  7. public class ClickButton extends Button {
  8. private String type;
  9. private String key;
  10.  
  11. public String getType() {
  12. return type;
  13. }
  14.  
  15. public void setType(String type) {
  16. this.type = type;
  17. }
  18.  
  19. public String getKey() {
  20. return key;
  21. }
  22.  
  23. public void setKey(String key) {
  24. this.key = key;
  25. }
  26. }

2)view类型的按钮有type、name和url3个属性,对应的类代码如下:

  1. /**
  2. * view类型的按钮
  3. *
  4. * @author liuyq
  5. * @date 2013-10-14
  6. */
  7. public class ViewButton extends Button {
  8. private String type;
  9. private String url;
  10.  
  11. public String getType() {
  12. return type;
  13. }
  14.  
  15. public void setType(String type) {
  16. this.type = type;
  17. }
  18.  
  19. public String getUrl() {
  20. return url;
  21. }
  22.  
  23. public void setUrl(String url) {
  24. this.url = url;
  25. }
  26. }

3)复合类型的按钮指的是含有子按钮的Button,也就是含有子菜单的一级菜单。对应的类代码如下:

  1. /**
  2. * 复合类型的按钮
  3. *
  4. * @author liufeng
  5. * @date 2013-10-14
  6. */
  7. public class ComplexButton extends Button {
  8. private Button[] sub_button;
  9.  
  10. public Button[] getSub_button() {
  11. return sub_button;
  12. }
  13.  
  14. public void setSub_button(Button[] sub_button) {
  15. this.sub_button = sub_button;
  16. }
  17. }

最后是整个菜单对象的封装,对应的代码如下:

  1. /**
  2. * 菜单
  3. *
  4. * @author liufeng
  5. * @date 2013-10-15
  6. */
  7. public class Menu {
  8. private Button[] button;
  9.  
  10. public Button[] getButton() {
  11. return button;
  12. }
  13.  
  14. public void setButton(Button[] button) {
  15. this.button = button;
  16. }
  17. }