`
Flyingh
  • 浏览: 18321 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Composite

 
阅读更多

Composite Pattern:意图是将对象组合成树形结构以表示部分-整体的层次结构,它使得用户对单个对象和组合对象的使用具有一致性。

下面以Iterator中的例子为例,不过,这里Department中除了含有Clerk外,也可以再含有子Department,它含有的子Department中也可以含有Clerk和Department,代码如下:

DepartComponent.java

package com.flyingh.abs;

public abstract class DepartComponent {
	public void add(DepartComponent departComponent) {
		throw new UnsupportedOperationException();
	}

	public void remove(DepartComponent departComponent) {
		throw new UnsupportedOperationException();
	}

	public DepartComponent getChild(int i) {
		throw new UnsupportedOperationException();
	}

	public abstract void print();
}

 Clerk.java

package com.flyingh.bean;

import com.flyingh.abs.DepartComponent;
import com.flyingh.util.Sex;

public class Clerk extends DepartComponent {
	private String id;
	private String name;
	private int age;
	private Sex sex;
	private float salary;

	public Clerk(String id, String name, int age, Sex sex, float salary) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.sex = sex;
		this.salary = salary;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Sex getSex() {
		return sex;
	}

	public void setSex(Sex sex) {
		this.sex = sex;
	}

	public float getSalary() {
		return salary;
	}

	public void setSalary(float salary) {
		this.salary = salary;
	}

	@Override
	public String toString() {
		return "Clerk [id=" + id + ", name=" + name + ", age=" + age + ", sex="
				+ sex + ", salary=" + salary + "]";
	}

	@Override
	public void print() {
		// TODO Auto-generated method stub
		System.out.println(this);
	}
}

Sex.java

package com.flyingh.util;

public enum Sex {
	man, woman;
} 

Depart.java

package com.flyingh.bean;

import java.util.ArrayList;
import java.util.List;

import com.flyingh.abs.DepartComponent;

public class Depart extends DepartComponent {
	private List<DepartComponent> list = new ArrayList<DepartComponent>();

	public Depart(List<DepartComponent> list) {
		super();
		this.list = list;
	}

	@Override
	public void add(DepartComponent departComponent) {
		// TODO Auto-generated method stub
		list.add(departComponent);
	}

	@Override
	public void remove(DepartComponent departComponent) {
		// TODO Auto-generated method stub
		list.remove(departComponent);
	}

	@Override
	public DepartComponent getChild(int i) {
		// TODO Auto-generated method stub
		return list.get(i);
	}

	@Override
	public void print() {
		// TODO Auto-generated method stub
		for (DepartComponent departComponent : list) {
			departComponent.print();
		}
	}

}

 Boss.java

package com.flyingh.bean;

import java.util.ArrayList;
import java.util.List;

import com.flyingh.abs.DepartComponent;

public class Boss {
	private List<DepartComponent> allList = new ArrayList<DepartComponent>();

	public Boss(List<DepartComponent> allList) {
		super();
		this.allList = allList;
	}

	public void printAllClerk() {
		for (DepartComponent departComponent : allList) {
			departComponent.print();
		}
	}
}

 Client.java

package com.flyingh.client;

import java.util.ArrayList;
import java.util.List;

import com.flyingh.abs.DepartComponent;
import com.flyingh.bean.Boss;
import com.flyingh.bean.Clerk;
import com.flyingh.bean.Depart;
import com.flyingh.util.Sex;

public class Client {
	public static void main(String[] args) {
		DepartComponent clerk1 = new Clerk("001", "zhangsan", 22, Sex.man, 8000);
		DepartComponent clerk2 = new Clerk("002", "lisi", 23, Sex.woman, 7788);

		DepartComponent clerkA1 = new Clerk("A1", "wangwuA", 25, Sex.man, 8800);
		DepartComponent clerkA2 = new Clerk("A2", "hahaA", 22, Sex.woman, 7878);
		List<DepartComponent> listA = new ArrayList<DepartComponent>();
		listA.add(clerkA1);
		listA.add(clerkA2);
		DepartComponent departA = new Depart(listA);

		DepartComponent clerkB1 = new Clerk("B1", "wangwuB", 25, Sex.man, 8800);
		DepartComponent clerkB2 = new Clerk("B2", "hahaB", 22, Sex.woman, 7878);
		List<DepartComponent> subList = new ArrayList<DepartComponent>();
		subList.add(new Clerk("subB1", "hehe", 21, Sex.man, 7000));
		subList.add(new Clerk("subB2", "heihei", 23, Sex.man, 7788));
		DepartComponent subDepartB = new Depart(subList);
		List<DepartComponent> listB = new ArrayList<DepartComponent>();
		listB.add(clerkB1);
		listB.add(clerkB2);
		listB.add(subDepartB);
		DepartComponent departB = new Depart(listB);

		DepartComponent clerkC1 = new Clerk("C1", "wangwuC", 25, Sex.man, 8800);
		DepartComponent clerkC2 = new Clerk("C2", "hahaC", 22, Sex.woman, 7878);
		DepartComponent clerkC3 = new Clerk("C3", "heheC", 22, Sex.man, 7879);
		List<DepartComponent> listC = new ArrayList<DepartComponent>();
		listC.add(clerkC1);
		listC.add(clerkC2);
		listC.add(clerkC3);
		DepartComponent departC = new Depart(listC);

		List<DepartComponent> allList = new ArrayList<DepartComponent>();
		allList.add(clerk1);
		allList.add(clerk2);
		allList.add(departA);
		allList.add(departB);
		allList.add(departC);
		Boss boss = new Boss(allList);

		boss.printAllClerk();

	}
}

 程序运行结果如下:

Clerk [id=001, name=zhangsan, age=22, sex=man, salary=8000.0]
Clerk [id=002, name=lisi, age=23, sex=woman, salary=7788.0]
Clerk [id=A1, name=wangwuA, age=25, sex=man, salary=8800.0]
Clerk [id=A2, name=hahaA, age=22, sex=woman, salary=7878.0]
Clerk [id=B1, name=wangwuB, age=25, sex=man, salary=8800.0]
Clerk [id=B2, name=hahaB, age=22, sex=woman, salary=7878.0]
Clerk [id=subB1, name=hehe, age=21, sex=man, salary=7000.0]
Clerk [id=subB2, name=heihei, age=23, sex=man, salary=7788.0]
Clerk [id=C1, name=wangwuC, age=25, sex=man, salary=8800.0]
Clerk [id=C2, name=hahaC, age=22, sex=woman, salary=7878.0]
Clerk [id=C3, name=heheC, age=22, sex=man, salary=7879.0]
 
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    DFT Composite Suite Pro使用手册

    ### DFT Composite Suite Pro 使用手册知识点解析 #### 一、软件概述 **DFT Composite Suite Pro**是一款专为Adobe After Effects (AE)平台设计的强大视觉特效合成工具包。该套件集成了高级软件设计与丰富的电影...

    SAMSUNG Mobile USB Composite Device

    "三星手机连电脑的驱动——SAMSUNG Mobile USB Composite Device"是用于在Windows操作系统中连接和管理三星智能手机的重要软件组件。这个驱动程序允许用户通过USB接口将手机与计算机进行通信,实现数据同步、充电、...

    2.4G无线传输+USB Composite Device

    标题中的“2.4G无线传输+USB Composite Device”指的是在一个STM32微控制器上同时实现2.4GHz无线通信和USB复合设备的功能。2.4GHz无线传输通常用于低功耗、短距离的数据通信,如蓝牙或Wi-Fi。而USB Composite Device...

    USB COMPOSITE API for Linux

    ### USB Composite API for Linux #### 10.1 Composite 设备简介 USB Composite 类是指能够支持多种设备功能的 USB 设备。例如,一个 USB 设备可能同时具备鼠标和键盘的功能。这种类型的设备与只具备单一功能的...

    usb composite device usb驱动程序

    USB复合设备(USB Composite Device)是指能够同时支持多种USB设备类别的设备,比如鼠标和键盘的组合、打印机和扫描仪的组合等。这样的设备在USB规范中被定义为具有多个功能集,每个功能集对应一个特定的USB设备类型。...

    Composite2011中文手册

    《Composite2011中文手册》是一份专为合成软件用户设计的详尽参考资料,它提供了全面的指导和深入理解该软件所需的各项功能。作为一款处理图像和视频的专业工具,Composite2011在视觉效果制作领域具有广泛的应用。这...

    qualcomm usb composite device 9025

    qualcomm usb composite device 9025 www@wujupeng.com

    impact-composite_复合材料冲击_impact_ABAQUS_composite_

    本资料包"impact-composite_复合材料冲击_impact_ABAQUS_composite_"聚焦于探讨如何利用ABAQUS对复合材料进行冲击响应分析,特别是关注设定不同初速度和固定速度条件下的影响。 复合材料是由两种或更多种具有不同...

    Microsoft.Practices.CompositeUI.WinForms.dll

    《Microsoft.Practices.CompositeUI.WinForms.dll:探索与应用》 在.NET框架的开发环境中,Microsoft.Practices.CompositeUI.WinForms.dll库扮演着一个重要的角色。它作为Composite UI Application Block(复合UI...

    kurento-tutorial-composite-js

    《Kurento-Tutorial-Composite-JS:构建多用户视频会议》 Kurento是一个强大的开源WebRTC媒体服务器,它提供了构建实时通信应用所需的工具和功能。本教程以"Kurento-tutorial-composite-js"为例,深入讲解如何在...

    Composite Pattern(组合模式)

    **组合模式(Composite Pattern)详解** 组合模式是一种结构型设计模式,它将对象组织成树形结构,使得用户可以对单个对象和对象集合进行统一操作。这种模式在处理部分与整体关系时非常有用,允许我们一致地处理...

    STM32_USB_Composite_CDC_MSC_Demo.7z

    STM32_USB_Composite_CDC_MSC_Demo项目是一个基于STM32微控制器的USB复合设备示例,它集成了CDC(通信设备类)和MSC(存储设备类)功能。这个项目展示了如何在STM32上同时实现串行通信接口(如虚拟COM口)和USB大...

    s-video&composite video&component video 几种视频格式详细说明和比较

    在讨论视频传输格式时,S-video、Composite Video和Component Video是三种常见的标准,它们各自具有不同的特点和优势。以下是这些视频格式的详细说明和比较。 首先,S-video,也被称为Separated-Video,是比...

    ANSYS Composite PrepPost Users Guide.pdf

    《ANSYS Composite PrepPost 用户指南》是为使用ANSYS复合材料前处理软件的用户提供的详细操作手册。该软件主要用于复合材料结构的分析和仿真,帮助工程师在设计阶段预测材料性能,优化设计方案,减少物理试验次数,...

    Design of Composite Structures Containing.pdf

    这份博士论文《含有螺栓孔和开口孔的复合材料结构设计》(Design of Composite Structures Containing Bolt Holes and Open Holes),由瑞典皇家理工学院航空系出版,报告编号为99-03,是该领域的重要贡献。...

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

    3. **Composite(组合)**:组合节点是包含其他Component对象的容器。它们也实现了Component接口,因此可以被客户端当作普通的Component对象处理。此外,Composite还负责管理其子对象,比如添加、删除和操作子对象。...

    Microsoft.Practices.CompositeUI.dll

    《深入理解Microsoft.Practices.CompositeUI.dll:DLL文件在软件开发中的核心作用》 Microsoft.Practices.CompositeUI.dll是微软公司开发的一个动态链接库(DLL)文件,它属于微软的Composite UI应用程序框架,该...

    Matlab composite_层合板_

    在"Matlab composite.m"文件中,我们可能看到以下几个关键知识点: 1. **材料属性**:首先需要定义各层材料的弹性模量E、剪切模量G、泊松比ν。对于复合材料,这些参数通常与纤维和基体的性质以及纤维方向有关。 2...

    Hibernate通过Composite-element配置外联表实例 (码)

    标题中的“Hibernate通过Composite-element配置外联表实例”是指在Java持久化框架Hibernate中,使用Composite-element注解或XML配置来处理复杂类型的属性,这些属性通常涉及到一对多或一对一的关系,但它们被存储在...

Global site tag (gtag.js) - Google Analytics