需求来了
今天领导叫过过去,说到,小陈,今年公司新的组织架构图出来了,如下图:
你做一个简单的系统,可以方便的表示他们的上下级关系和他们的序号吧。
需求的思考
针对这样的一个需求,根据上面的组织架构图,我很快的想到了采用组织设计模式进行架构的设计。
那么组织设计模式是什么呢?
通俗一点讲:上层节点和下层节点的结构是一样的或者相似的。
比如 张三,他的内部包括他的名字、他的工号、和他的子员工(李四和王五),
而王五呢,他的内部包括他的名字,他的工号,和他的子员工(赵六和陈七) ,
很显然,他们的结构是一致的,像这样的一种模型,我们就可以用组织设计模型进行架构设计。
需求的实现
第一步:定义节点
package com.example.createproject;
import java.util.ArrayList;
/**
* 每一个节点,这个节点就是人
*/
public class Person {
public String name; // 名字
public int index; // 序列号
public Person(String name, int index) {
this.name = name;
this.index = index;
}
public ArrayList<Person> leafPersonList = new ArrayList<>(); // 子节点列表
public void addPerson(Person person){
leafPersonList.add(person);
}
}
第二步:节点数据初始化和节点数据遍历操作。
package com.example.createproject;
import android.util.Log;
import java.util.ArrayList;
import javax.xml.namespace.QName;
public class PersonManager {
private static final String TAG = PersonManager.class.getSimpleName();
private Person init() {
Person zhang3 = new Person("张三", 001);
Person li4 = new Person("李四", 002);
Person wang5 = new Person("王五", 003);
Person zhao6 = new Person("赵六", 004);
Person chen7 = new Person("赵六", 005);
zhang3.addPerson(li4);
zhang3.addPerson(wang5);
wang5.addPerson(zhao6);
wang5.addPerson(chen7);
return zhang3;
}
/**
* 展示所有人的信息
*/
public void show() {
Person person = init();
show(person);
}
/**
* 递归调用
* @param person
*/
public void show(Person person) {
Log.e(TAG,person.name + " " + person.index);
ArrayList<Person> list = person.leafPersonList;
if (list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
Person temp = list.get(i);
show(temp);
}
}
}
}
组合模式的使用场景
如果一组数据是树状结构的数据结构,并且每个节点的结构都是一样的或者相似的,那么就可以采用组合设计模式去设计存储结构。
比如:
1、文件、文件夹系统,实现目录选择器。
2、人员组织架构。
3、View、ViewGroup的嵌套组合。
4、省、市、区的图。
总结
1、可能很多的同学在平时工作中也会用到这种方式来封装树状数据,但是自己并不知道采用了组合设计模式,通过今天的学习,发现组合设计模式原来如此。
2、最后让我们一起大声呼喊:组合设计模式就是为了封装树状结构而生的。