`

设计模式----组合模式(composite)

 
阅读更多
该设计模式是以公司的组织结构为背景的

Crop.java代码如下:

package com.designPattern.composite;

public abstract class Corp {

	private String name ="";
	
	private String position = "";
	
	private int salary = 0;
	
	public Corp(String name,String position,int salary){
		this.name = name;
		this.position = position;
		this.salary = salary;
	}
	
	public String getInfo(){
		String info = "姓名:"+this.name+"\t职位:"+this.position+"\t薪水:"+this.salary;
		return info;
	}
}



Leaf.java代码如下:

package com.designPattern.composite;

public class Leaf extends Corp{

	public Leaf(String name, String position, int salary) {
		super(name, position, salary);
	}

}



Branch.java代码如下:
 package com.designPattern.composite;

import java.util.ArrayList;

public class Branch extends Corp{
	ArrayList<Corp> subordinateList = new ArrayList<Corp>();

	public Branch(String name, String position, int salary) {
		super(name, position, salary);
	}
	
	public void addSubordinate(Corp corp){
		this.subordinateList.add(corp);
	}
	
	public ArrayList<Corp> getSubordinate(){
		return this.subordinateList;
	}

}



Client.java代码如下:
 package com.designPattern.composite;

import java.util.ArrayList;

public class Client {
	
	public static void main(String[] args) {
		Branch ceo = compositeTree();
		System.out.println(ceo.getInfo());
		
		System.out.println(getTreeInfo(ceo));
	}
	
	public static Branch compositeTree(){
		Branch root = new Branch("老大","总经理",100000);
		
		Branch developDep = new Branch("老刘","研发部经理",10000);
		Branch salesDep = new Branch("老马","销售部经理",20000);
		Branch financeDep = new Branch("老赵","财务部经理",30000);
		
		Branch firstDevGroup = new Branch("杨组长","研发一组组长",8000);
		Branch secondDevGroup = new Branch("吴组长","研发二组组长",8000);
		
		Leaf a = new Leaf("a","开发人员",2000);
		Leaf b = new Leaf("b","开发人员",2000);
		Leaf c = new Leaf("c","开发人员",2000);
		Leaf d = new Leaf("d","开发人员",2000);
		Leaf e = new Leaf("e","开发人员",2000);
		Leaf f = new Leaf("f","开发人员",2000);
		Leaf g = new Leaf("g","开发人员",2000);
		Leaf h = new Leaf("h","开发人员",2000);
		Leaf i = new Leaf("i","开发人员",2000);
		Leaf k = new Leaf("k","销售人员",2000);
		Leaf l = new Leaf("l","销售人员",2000);
		Leaf j = new Leaf("j","财务人员",2000);
		Leaf m = new Leaf("m","财务人员",2000);
		Leaf n = new Leaf("n","CEO秘书",2000);
		Leaf p = new Leaf("陆副经理","研发部副经理",2000);
		
		firstDevGroup.addSubordinate(a);
		firstDevGroup.addSubordinate(b);
		firstDevGroup.addSubordinate(c);
		firstDevGroup.addSubordinate(d);
		
		secondDevGroup.addSubordinate(e);
		secondDevGroup.addSubordinate(f);
		secondDevGroup.addSubordinate(g);
		secondDevGroup.addSubordinate(h);
		secondDevGroup.addSubordinate(i);
		
		salesDep.addSubordinate(k);
		salesDep.addSubordinate(l);
		
		financeDep.addSubordinate(j);
		financeDep.addSubordinate(m);
	
		developDep.addSubordinate(firstDevGroup);
		developDep.addSubordinate(secondDevGroup);
		developDep.addSubordinate(p);
		
		root.addSubordinate(n);
		root.addSubordinate(salesDep);
		root.addSubordinate(financeDep);
		root.addSubordinate(developDep);
		
		return root;
		
	}
	
	public static String getTreeInfo(Branch root){
		ArrayList<Corp> subordinateList = root.getSubordinate();
		String info = "";
		
		for(Corp c:subordinateList){
			if(c instanceof Leaf){
				info = info +c.getInfo()+"\n";
			}else{
				info = info +c.getInfo()+"\n"+getTreeInfo((Branch)c);
			}
		}
		
		return info;
	}

}



运行结果如下:
 姓名:老大	职位:总经理	薪水:100000
姓名:n	职位:CEO秘书	薪水:2000
姓名:老马	职位:销售部经理	薪水:20000
姓名:k	职位:销售人员	薪水:2000
姓名:l	职位:销售人员	薪水:2000
姓名:老赵	职位:财务部经理	薪水:30000
姓名:j	职位:财务人员	薪水:2000
姓名:m	职位:财务人员	薪水:2000
姓名:老刘	职位:研发部经理	薪水:10000
姓名:杨组长	职位:研发一组组长	薪水:8000
姓名:a	职位:开发人员	薪水:2000
姓名:b	职位:开发人员	薪水:2000
姓名:c	职位:开发人员	薪水:2000
姓名:d	职位:开发人员	薪水:2000
姓名:吴组长	职位:研发二组组长	薪水:8000
姓名:e	职位:开发人员	薪水:2000
姓名:f	职位:开发人员	薪水:2000
姓名:g	职位:开发人员	薪水:2000
姓名:h	职位:开发人员	薪水:2000
姓名:i	职位:开发人员	薪水:2000
姓名:陆副经理	职位:研发部副经理	薪水:2000
分享到:
评论

相关推荐

    c++设计模式-结构型模式-组合模式

    c++设计模式-结构型模式-组合模式;qt工程;c++简单源码; 组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系...

    设计模式之组合模式(Composite Pattern)

    组合模式是一种行为设计模式,属于面向对象设计中的结构型模式,其主要目的是为了建立一种对象树形结构,这种结构能够使客户端代码以统一的方式处理单个对象和对象的组合。在组合模式中,我们通常会定义一个基类,...

    java常用设计模式-组合模式

    组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构以表示“部分-整体”的层次结构。这种模式使得客户端可以统一对待单个对象和对象组合。在组合模式中,有两种基本类型的对象:叶...

    设计模式--组合模式java例子

    组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分-整体关系,使得我们能够像处理单个对象一样处理整个集合。在Java中,这种模式的应用可以帮助我们简化对复杂对象层次结构的操作,同时保持接口的...

    设计模式-组合实体

    在众多设计模式中,组合实体(Composite)模式是一种结构型模式,它允许我们以树形结构来表示部分与整体的关系,使得用户可以一致地处理单个对象和对象组合。在iOS开发中,组合实体模式尤其有用,因为它简化了复杂...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构。 - 装饰模式(Decorator):动态地给一个对象添加一些额外的职责。 - 享元模式(Flyweight):使用共享对象,有效地支持大量细...

    组合模式-------树形模式

    组合模式,也称为树形模式,是一种结构型设计模式,它允许我们表示部分-整体层次结构,使得客户端代码可以统一地处理单个对象和对象集合。这种模式将对象组织成树形结构,允许用户对部分或整个树进行操作,简化了...

    JAVA设计模式-chm版

    包括适配器模式(Adapter)、桥接模式(Bridge)、装饰器模式(Decorator)、外观模式(Facade)、组合模式(Composite)、享元模式(Flyweight)和代理模式(Proxy)。这些模式可以帮助我们更好地组织代码,实现...

    【Java设计模式-源码】组合模式:构建灵活的树结构

    一、概述 在Java中,组合模式用于将对象组合成树结构,以表示...在软件工程中,组合模式是一种分区设计模式。组合模式描述了一组对象应被视为单个对象的实例来处理。组合的意图是将对象“组合”成树结构,以表示部分

    设计模式-组合模式(讲解及其实现代码)

    组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分与整体的关系,使得我们能够以统一的方式来处理单个对象和对象的组合。在组合模式中,单个对象和组合对象都被视为同一类型,这使得客户端代码可以对...

    26种设计模式-----pdf

    结构型模式则关注如何将类或对象组合成更大的结构,例如适配器模式(Adapter)、装饰器模式(Decorator)、代理模式(Proxy)、桥接模式(Bridge)和组合模式(Composite)。这些模式可以帮助我们处理类与类之间的...

    设计模式-王翔 全本

    例如,装饰器模式可以和组合模式(Composite)结合,用于动态地增加或减少对象的功能。同时,王翔可能会讨论如何在实际项目中选择和应用设计模式,以及避免陷入过度设计的陷阱。 在阅读《设计模式》.pdf的过程中,...

    C#设计模式-C#设计模式

    7. 组合模式(Composite): 组合模式将对象组合成树形结构以表示“部分-整体”的层次结构。C#中的组合模式允许用户对单个对象和组合对象进行一致的操作,提供了一种统一的接口。 8. 装饰器模式(Decorator): ...

    23种 设计模式---面向对象的基本原则

    - 组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 - 装饰模式(Decorator):动态地给一个对象添加一些额外的职责,提供比继承更...

    设计模式专题之(九)组合模式---设计模式组合模式示例代码(python--c++)

    组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分与整体的关系,使得我们可以在统一的接口下处理单个对象和对象的组合。这个模式在处理类似目录树或者组织架构这样的数据时非常有用。在组合模式中,...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 0. 引言 ##### 0.1 设计模式解析(总序) 设计模式是面向对象编程中用于解决常见问题的一系列模板。它们为软件设计提供了标准化的解决方案,帮助...

    设计模式-可复用面向对象软件的基础

    2. 结构型模式:关注如何将类或对象组合成更大的结构,例如适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、装饰模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)和代理模式...

Global site tag (gtag.js) - Google Analytics