用java实现组织架构,集团,总公司,分公司, 要求 每个角色看到的数据权限不一样,请实现代码
时间: 2024-05-15 15:15:45 浏览: 19
以下是一个简单的Java实现:
```java
// 定义组织架构节点类
class OrgNode {
private String name;
private List<OrgNode> children;
public OrgNode(String name) {
this.name = name;
children = new ArrayList<>();
}
public String getName() {
return name;
}
public void addChild(OrgNode child) {
children.add(child);
}
public List<OrgNode> getChildren() {
return children;
}
}
// 定义角色类
abstract class Role {
protected String name;
protected List<OrgNode> authorizedNodes;
public Role(String name) {
this.name = name;
authorizedNodes = new ArrayList<>();
}
public void addAuthorizedNode(OrgNode node) {
authorizedNodes.add(node);
}
public List<OrgNode> getAuthorizedNodes() {
return authorizedNodes;
}
public abstract void viewData();
}
// 定义集团类
class Group extends OrgNode {
public Group(String name) {
super(name);
}
}
// 定义总公司类
class Headquarters extends OrgNode {
public Headquarters(String name) {
super(name);
}
}
// 定义分公司类
class Branch extends OrgNode {
public Branch(String name) {
super(name);
}
}
// 定义CEO角色类
class CEO extends Role {
public CEO(String name) {
super(name);
}
@Override
public void viewData() {
System.out.println("CEO可以看到所有数据");
for (OrgNode node : authorizedNodes) {
System.out.println(node.getName());
}
}
}
// 定义总经理角色类
class GeneralManager extends Role {
public GeneralManager(String name) {
super(name);
}
@Override
public void viewData() {
System.out.println("总经理可以看到本公司及以下的数据");
for (OrgNode node : authorizedNodes) {
System.out.println(node.getName());
for (OrgNode child : node.getChildren()) {
System.out.println(child.getName());
}
}
}
}
// 定义部门经理角色类
class DepartmentManager extends Role {
public DepartmentManager(String name) {
super(name);
}
@Override
public void viewData() {
System.out.println("部门经理可以看到本部门的数据");
for (OrgNode node : authorizedNodes) {
System.out.println(node.getName());
}
}
}
public class OrgChart {
public static void main(String[] args) {
// 创建组织架构
Group group = new Group("集团");
Headquarters hq = new Headquarters("总公司");
Branch branch1 = new Branch("分公司1");
Branch branch2 = new Branch("分公司2");
OrgNode dept1 = new OrgNode("部门1");
OrgNode dept2 = new OrgNode("部门2");
group.addChild(hq);
hq.addChild(branch1);
hq.addChild(branch2);
branch1.addChild(dept1);
branch2.addChild(dept2);
// 创建角色
CEO ceo = new CEO("CEO");
GeneralManager gm = new GeneralManager("总经理");
DepartmentManager dm = new DepartmentManager("部门经理");
// 授权
ceo.addAuthorizedNode(group);
gm.addAuthorizedNode(hq);
dm.addAuthorizedNode(dept1);
dm.addAuthorizedNode(dept2);
// 查看数据权限
ceo.viewData();
gm.viewData();
dm.viewData();
}
}
```
在上面的代码中,首先定义了一个`OrgNode`类,表示组织架构节点,包含名称和子节点列表。然后定义了一个`Role`抽象类,表示角色,包含名称和授权的节点列表,还有一个`viewData()`方法,表示查看授权的数据权限。接着定义了三个具体的组织架构节点类:集团、总公司和分公司。然后分别定义了三个具体的角色类:CEO、总经理和部门经理。最后在`main()`方法中创建组织架构和角色,并进行授权和查看数据权限。注意到不同的角色查看的数据权限不同。
阅读全文