没有合适的资源?快使用搜索试试~ 我知道了~
Android 设计模式系列-组合模式
Android 中对组合模式的应用,可谓是泛滥成粥,随处可见,那就是 View 和
ViewGroup 类的使用。在 android UI 设计,几乎所有的 widget 和布局类都依靠这两个
类。
组合模式,Composite Pattern,是一个非常巧妙的模式。几乎所有的面向对象系统都应
用到了组合模式。
1.意图
将对象 View 和 ViewGroup 组合成树形结构以表示"部分-整体"的层次结构(View 可以做
为 ViewGroup 的一部分)。
组合模式使得用户对单个对象 View 和组合对象 ViewGroup 的使用具有一致性。
热点词汇: 部分-整体 容器-内容 树形结构 一致性 叶子 合成 安全性 透明性
2.结构
针对 View 和 ViewGroup 的实际情况,我们选择安全式的组合模式(在组合对象中添
加 add,remove,getChild 方法),添加少许的注释,我们把上图修改为:
3.代码
View 类的实现:
1. publicclassView{
2.
3. //......
4.
5. //省略了无关的方法
6.
7. }
ViewGroup 的实现:
1. publicabstractclassViewGroupextendsView{
2.
3. /**
4. *Addsachildview.
5.
6. */
7.
8. publicvoidaddView(Viewchild){
9.
10. //...
11.
12. }
13.
14.
15.
16. publicvoidremoveView(Viewview){
17.
18. //...
19.
20. }
21.
22.
23.
24. /**
25.
26. *Returnstheviewatthespecifiedpositioninthegroup.
27.
28. */
29.
30. publicViewgetChildAt(intindex){
31.
32. try{
33.
34. returnmChildren[index];
35.
36. }catch(IndexOutOfBoundsExceptionex){
37.
38. returnnull;
39.
40. }
41.
42. }
43.
44.
45.
46. //othermethods
47.
48. }
4.效果
(1).结构型模式
(2).定义了包含基本对象和组合对象的类层次结构。这种结构能够灵活控制基本对象与组
合对象的使用。
(3).简化客户代码。基本对象和组合对象有一致性,用户不用区分它们。
(4).使得更容易添加新类型的组件。
(5).使你的设计变得更加一般化。
基于 Java 的样例:
比如现实中公司内各部门的层级关系
抽象接口类:
package com.zyh.designpattern.composite;
public abstract class Company {
private String name;
public Company(String name) {
super();
this.name = name;
}
public Company(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
protected abstract void add(Company company);
protected abstract void romove(Company company);
protected abstract void display(int depth);
}
枝结点类:
package com.zyh.designpattern.composite;
import java.util.ArrayList;
import java.util.List;
public class ConcreteCompany extends Company {
private List cList; public ConcreteCompany() { cList = new ArrayList(); } public
ConcreteCompany(String name) { super(name); cList = new ArrayList(); }
@Override
protected void add(Company company) {
// TODO Auto-generated method stub
cList.add(company);
}
@Override
protected void display(int depth) {
// TODO Auto-generated method stub
StringBuilder sb = new StringBuilder("");
for (int i = 0; i < depth; i++) {
sb.append("-");
}
System.out.println(new String(sb) + this.getName());
for (Company c : cList) {
c.display(depth + 2);
}
}
@Override
protected void romove(Company company) {
// TODO Auto-generated method stub
cList.remove(company);
}
}
剩余50页未读,继续阅读
资源推荐
资源评论
167 浏览量
5星 · 资源好评率100%
149 浏览量
2022-07-08 上传
5星 · 资源好评率100%
139 浏览量
132 浏览量
5星 · 资源好评率100%
116 浏览量
5星 · 资源好评率100%
188 浏览量
189 浏览量
2022-07-13 上传
2022-11-19 上传
2021-09-17 上传
2020-09-01 上传
2017-09-06 上传
2024-05-08 上传
2021-10-11 上传
102 浏览量
179 浏览量
资源评论
卢管管
- 粉丝: 2
- 资源: 19
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- matlab平台的 SVM和颜色结合的虫害检测.zip
- matlab平台的车标识别.zip
- matlab平台的标志是识别系统.zip
- matlab平台的车道线检测.zip
- 基于java的城市垃圾分类管理系统设计与实现.docx
- matlab平台的车辆检测.zip
- matlab平台的车牌出入库计费系统.zip
- 基于java的餐厅点餐管理系统设计与实现.docx
- 基于java的车辆违章信息管理系统设计与实现.docx
- 基于java的宠物爱心组织管理系统设计与实现.docx
- 基于java的宠物猫认养系统设计与实现.docx
- 基于java的宠物商城网站系统设计与实现.docx
- 基于java的大学生创新创业项目管理系统设计与实现.docx
- matlab平台的车道线检测定位.zip
- 基于java的大学生计算机基础网络教学系统设计与实现.docx
- 基于java的大学生就业服务平台设计与实现.docx
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功