码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式 之 创建型模式 <四> 组合模式(Composite Pattern )

时间:2020-08-06 09:20:48      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:软件公司   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 }
View Code

  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 }
View Code

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 }
View Code

 

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!