标签:软件公司 driver 子节点 style 图片 remove rip 界面 创建型模式
组合模式的角色:
● Component(抽象构件):它可以是接口或抽象类,为叶子构件和容器构件对象声明接口, 在该角色中可以包含所有子类共有行为的声明和实现。
在抽象构件中定义了访问及管理它的子构件的方法,如增加子构件、删除子构件、获取子构件等。
● Leaf(叶子构件):它在组合结构中表示叶子节点对象,叶子节点没有子节点,它实现了在 抽象构件中定义的行为。
对于那些访问及管理子构件的方法,可以通过异常等方式进行处理。
● Composite(容器构件):它在组合结构中表示容器节点对象,容器节点包含子节点,其子 节点可以是叶子节点,也可以是容器节点,
它提供一个集合用于存储子节点,实现了在抽象 构件中定义的行为,包括那些访问及管理子构件的方法,在其业务方法中可以递归调用其子 节点的业务方法
练习:Sunny软件公司欲开发一个界面控件库,界面控件分为两大类:
一类是单元控件,例如按钮、文本框等,
一类是容器控件,例如窗体、中间面板 等,试用组合模式设计该界面控 件库。
Component(抽象构件)
1 public abstract class ControlComponent { 2 protected String name; 3 public ControlComponent(String name){ 4 this.name=name; 5 } 6 //增加控件 7 public abstract void add(ControlComponent component); 8 //删除控件 9 public abstract void remove(ControlComponent component); 10 //控件说明 11 public abstract void description(String prefix); 12 }
Leaf(叶子构件)
1 public class Button extends ControlComponent { 2 public Button(String name) { 3 super(name); 4 } 5 6 @Override 7 public void add(ControlComponent component) { 8 9 } 10 11 @Override 12 public void remove(ControlComponent component) { 13 14 } 15 16 @Override 17 public void description(String prefix) { 18 Log.d("composite",prefix+"开始装载Botton控件!"); 19 } 20 } 21 22 23 public class TextBox extends ControlComponent { 24 public TextBox(String name) { 25 super(name); 26 } 27 28 @Override 29 public void add(ControlComponent component) { 30 31 } 32 33 @Override 34 public void remove(ControlComponent component) { 35 36 } 37 38 @Override 39 public void description(String prefix) { 40 Log.d("composite",prefix+"开始装载文本控件!"); 41 } 42 }
Composite(容器构件)
1 public class Window extends ControlComponent { 2 List<ControlComponent> list=new ArrayList<>(); 3 public Window(String name) { 4 super(name); 5 } 6 @Override 7 public void add(ControlComponent component) { 8 list.add(component); 9 } 10 11 @Override 12 public void remove(ControlComponent component) { 13 list.add(component); 14 } 15 16 @Override 17 public void description(String prefix) { 18 Log.d("composite","开始加载Window窗体!"); 19 for(ControlComponent controlComponent:list){ 20 controlComponent.description("---"); 21 } 22 } 23 } 24 25 26 27 28 public class Panel extends ControlComponent { 29 List<ControlComponent> list=new ArrayList<>(); 30 public Panel(String name) { 31 super(name); 32 } 33 34 @Override 35 public void add(ControlComponent component) { 36 list.add(component); 37 } 38 39 @Override 40 public void remove(ControlComponent component) { 41 list.remove(component); 42 } 43 44 @Override 45 public void description(String prefix) { 46 Log.d("composite",prefix+"开始装载Panel容器!"); 47 for(ControlComponent controlComponent:list){ 48 controlComponent.description(prefix+"---"); 49 } 50 } 51 }
https://github.com/Smither01/usbSerialForAndroid/blob/master/src/com/hoho/android/usbserial/driver/ProlificSerialDriver.java
设计模式 之 创建型模式 <四> 组合模式(Composite Pattern )
标签:软件公司 driver 子节点 style 图片 remove rip 界面 创建型模式
原文地址:https://www.cnblogs.com/jtzp007/p/13443703.html