浅谈JAVA设计模式之——组合模式(Composite)_设计模式之composite(组合)设计模式-程序员宅基地

技术标签: 精通设计模式系列  Composite  java设计模式  精通Java系列  

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/45458081
一、概述

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

二、适用性

1.你想表示对象的部分-整体层次结构。

2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

三、参与者

1.Component 为组合中的对象声明接口。 在适当的情况下,实现所有类共有接口的缺省行为。 声明一个接口用于访问和管理Component的子组件。 (可选)在递归结构中定义一个接口,用于访问一个父部件,并在合适的情况下实现它。

2.Leaf 在组合中表示叶节点对象,叶节点没有子节点。 在组合中定义节点对象的行为。

3.Composite 定义有子部件的那些部件的行为。 存储子部件。 在Component接口中实现与子部件有关的操作。

4.Client 通过Component接口操纵组合部件的对象。

四、类图

五、示例

Component
package com.lyz.design.composite;

import java.util.List;

/**
 * 定义Component 类Employer
 * @author liuyazhuang
 *
 */
public abstract class Employer {
    private String name;
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
    public abstract void add(Employer employer);
    
    public abstract void delete(Employer employer);
    
    public List<Employer> employers;
    
    public void printInfo() {
        System.out.println(name);
    }
    
    public List<Employer> getEmployers() {
        return this.employers;
    }
}

Leaf

package com.lyz.design.composite;
/**
 * 定义Leaf类Programmer
 * @author liuyazhuang
 *
 */
public class Programmer extends Employer {
    public Programmer(String name) {
        setName(name);
        employers = null;//程序员, 表示没有下属了
    }
    public void add(Employer employer) {
    }

    public void delete(Employer employer) {
    }
}

package com.lyz.design.composite;
/**
 * 定义Leaf类ProjectAssistant
 * @author liuyazhuang
 *
 */
public class ProjectAssistant extends Employer {
    public ProjectAssistant(String name) {
        setName(name);
        employers = null;//项目助理, 表示没有下属了
    }
    public void add(Employer employer) {
        
    }

    public void delete(Employer employer) {
        
    }
}

Composite
package com.lyz.design.composite;

import java.util.ArrayList;

/**
 * 定义Composite类ProjectManager类
 * @author liuyazhuang
 *
 */
public class ProjectManager extends Employer {
    public ProjectManager(String name) {
        setName(name);
        employers = new ArrayList<Employer>();
    }
    
    public void add(Employer employer) {
        employers.add(employer);
    }

    public void delete(Employer employer) {
        employers.remove(employer);
    }
}

Client
package com.lyz.design.composite;

import java.util.List;

/**
 * 测试类
 * @author liuyazhuang
 *
 */
public class Test {
    public static void main(String[] args) {
        Employer pm = new ProjectManager("项目经理");
        Employer pa = new ProjectAssistant("项目助理");
        Employer programmer1 = new Programmer("程序员一");
        Employer programmer2 = new Programmer("程序员二");
        
        pm.add(pa);//为项目经理添加项目助理
        pm.add(programmer2);//为项目经理添加程序员
        
        List<Employer> ems = pm.getEmployers();
        for (Employer em : ems) {
            System.out.println(em.getName());
        }
    }
}

result
项目助理
程序员二


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/l1028386804/article/details/45458081

智能推荐

javaWeb网上手机销售系统-程序员宅基地

文章浏览阅读550次,点赞13次,收藏16次。以下内容是对本系统所采用的开发工具和技术进行的简单介绍。Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,但是目前亦有人通过插件使其作为C++、Python、PHP等其他语言的开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持,使得Eclipse拥有较佳的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。

java设计模式-模板方法(七)_java中模板模式的远程调用-程序员宅基地

文章浏览阅读198次。比如我们项目中有很多调用第三方系统的功能(如支付宝或微信),实际无非就是以下几步:1.组装调用支付宝或微信需要的参数2.请求支付宝或微信3.解析支付宝或微信的响应参数4.针对调用异常处理(非必须,子类可重写)这是固定的流程或者模板。接下来咱们以请求支付宝和微信为例:先定义一个抽象类package com.lifeng.patterns.templatemethod;import..._java中模板模式的远程调用

Oracle 数据类型转换成时间_oracle整数转时间-程序员宅基地

文章浏览阅读1.6k次。毫秒转换为日期SELECT TO_CHAR(1645409666000 / (1000 * 60 * 60 * 24) + TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') AS CDATE FROM DUAL;_oracle整数转时间

HUAWEI DevEco Studio教程一(鸿蒙HarmonyOS)_devecostudio教程-程序员宅基地

文章浏览阅读1.3w次,点赞7次,收藏37次。介绍HUAWEI DevEco Studio是基于IntelliJ IDEA Community开源版本打造,面向华为终端全场景多设备的一站式集成开发环境(IDE),为开发者提供工程模板创建、开发、编译、调试、发布等E2E的HarmonyOS应用开发服务。通过使用DevEco Studio,开发者可以更高效的开发具备HarmonyOS分布式能力的应用,进而提升创新效率。作为一款开发工具,除了具有基本的代码开发、编译构建及调测等功能外,DevEco Studio还具有如下特点:(图片来源于网络)安装_devecostudio教程

PPU时代来临——AGEIA物理加速卡全面解析(zz-程序员宅基地

文章浏览阅读641次。[3D加速后又一全新理念]3D显卡的诞生令人们可以通过显示设备领略到“十分真实”的画面,在1996年,几乎所有市面上出现的显卡产品都宣称拥有一定的3D处理能力,不过当时它们大多只是通过显卡芯片完成常规画面渲染工作,而3D场景模型构建和光照效果运算都是通过专门的软件算法由CPU来处理。包括当时的API也没有统一的标准,实际的3D效果可谓十分..._ppu显卡是哪个厂家

Java集合之Collection接口-程序员宅基地

文章浏览阅读34次。java的集合分为三大接口,分别是Collection,Map,Iterator,集合接口和类在java.util包中,此次主要介绍三大接口之一的Collection接口。  一些Collection允许有重复元素,而另一些则不允许,一些Collection是有序的,另一些则是无序的。Collection不提供接口的任何直接实现,它提供更加具体的子接口List和Set。  1.List接口...

随便推点

微型计算机控制系统的硬件组成_微型计算机控制器的组成-程序员宅基地

文章浏览阅读4k次。文章目录微型计算机控制系统的硬件组成1、CPU2、I/O接口3、通用外部设备4、检测元件及执行机构5、操作台微型计算机控制系统的硬件组成微型计算机控制系统主要有主机CPU、接口电路及外部设备组成。不同的控制器硬件组成不同,但一般都可以根据需求进行扩展。1、CPU微型处理器是整个控制系统的指挥部,通过结构及软件可向系统的各个部分发出各种号令,对被测参数进行巡回检测、数据处理、控制计算、报警处理及逻辑判断等操作。因此,主机是微型控制系统的重要组成部分,主机的选用将影响到系统的功能机接口电路的设计等。由于_微型计算机控制器的组成

vue前端接收后端文件流进行下载_vue接收文件流并下载-程序员宅基地

文章浏览阅读2.2k次。vue前端接收后端文件流进行下载_vue接收文件流并下载

感应(异步)电机磁场定向控制电流环PI控制参数设计_异步电机focpi-程序员宅基地

文章浏览阅读5.2k次,点赞10次,收藏65次。目录前言一、并联型PI与串联型PI二、被控对象模型三、电流环闭环传递函数四、电流环PI参数设计五、计算延时、PWM采样延时、滤波器的影响1、计算延时2、PWM采样延时总结前言大家在做感应(异步)电机磁场定向控制(FOC)的时候,是否还在疑惑PI参数怎么给,还在用PI参数整定口诀一点一点去试,或者按书籍论文的计算公式搞出来不对?那你的电机控制理论需要进一步深入了,如果按照书籍论文的计算公式算出来不能用,你可以来这里看看你的MATLAB/Simulink建模有没有问题:感应(异步)电机磁场定向控制MATL_异步电机focpi

机器学习笔记1-k近邻算法的实现,跳槽薪资翻倍-程序员宅基地

文章浏览阅读738次,点赞14次,收藏8次。Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

Linux网卡基本结构和传输流程总结_linux网卡类型-程序员宅基地

文章浏览阅读2.6k次。简介网卡的功能主要有两个:一、是将电脑的数据封装为帧,并通过网线(对无线网络来说就是电磁波)将数据发送到网络上去;二、是接收网络上其它设备传过来的帧,并将帧重新组合成数据,发送到所在的应用层中。本文介绍网卡的结构和基本的网卡传输流程。网卡的结构网络设备主要分为 PHY、MAC 和 DMA 三个硬件模块。以太网卡中数据链路层的芯片一般简称之为MAC控制器,物理层的芯片我们简称之为PHY,同时通过DMA进行数据的传输。物理层定义了数据传送与接收所需要的电与光信号、线路状态、时钟基准、数据编码和电路_linux网卡类型

C/C++ 书店销售管理系统_书店管理系统代码-程序员宅基地

文章浏览阅读465次,点赞2次,收藏15次。【代码】C/C++ 书店销售管理系统。_书店管理系统代码

推荐文章

热门文章

相关标签