java组合模式写法(java中的组合的概念)
admin
2023-09-09 11:44:21
0

组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。

我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的层次结构。

介绍

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

主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。

何时使用: 1、您想表示对象的部分-整体层次结构(树形结构)。 2、您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

如何解决:树枝和叶子实现统一接口,树枝内部组合该接口。

关键代码:树枝内部组合该接口,并且含有内部属性 List,里面放 Component。

应用实例: 1、算术表达式包括操作数、操作符和另一个操作数,其中,另一个操作符也可以是操作数、操作符和另一个操作数。 2、在 JAVA AWT 和 SWING 中,对于 Button 和 Checkbox 是树叶,Container 是树枝。

优点: 1、高层模块调用简单。 2、节点自由增加。

缺点:在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。

使用场景:部分、整体场景,如树形菜单,文件、文件夹的管理。

注意事项:定义时为具体类。

实现

我们有一个类 Employee,该类被当作组合模型类。CompositePatternDemo,我们的演示类使用 Employee 类来添加部门层次结构,并打印所有员工。

步骤 1

创建 Employee 类,该类带有 Employee 对象的列表。

Employee.java

import java.util.ArrayList;

import java.util.List;

public class Employee {

private String name;

private String dept;

private int salary;

private List subordinates;

//构造函数

public Employee(String name,String dept, int sal) {

this.name = name;

this.dept = dept;

this.salary = sal;

subordinates = new ArrayList();

}

public void add(Employee e) {

subordinates.add(e);

}

public void remove(Employee e) {

subordinates.remove(e);

}

public List getSubordinates(){

return subordinates;

}

public String toString(){

return (“Employee :[ Name : “+ name

+”, dept : “+ dept + “, salary :”

+ salary+” ]”);

}

}

步骤 2

使用 Employee 类来创建和打印员工的层次结构。

CompositePatternDemo.java

public class CompositePatternDemo {

public static void main(String[] args) {

Employee CEO = new Employee(“John”,”CEO”, 30000);

Employee headSales = new Employee(“Robert”,”Head Sales”, 20000);

Employee headMarketing = new Employee(“Michel”,”Head Marketing”, 20000);

Employee clerk1 = new Employee(“Laura”,”Marketing”, 10000);

Employee clerk2 = new Employee(“Bob”,”Marketing”, 10000);

Employee salesExecutive1 = new Employee(“Richard”,”Sales”, 10000);

Employee salesExecutive2 = new Employee(“Rob”,”Sales”, 10000);

CEO.add(headSales);

CEO.add(headMarketing);

headSales.add(salesExecutive1);

headSales.add(salesExecutive2);

headMarketing.add(clerk1);

headMarketing.add(clerk2);

//打印该组织的所有员工

System.out.println(CEO);

for (Employee headEmployee : CEO.getSubordinates()) {

System.out.println(headEmployee);

for (Employee employee : headEmployee.getSubordinates()) {

System.out.println(employee);

}

}

}

}

步骤 3

验证输出。

Employee :[ Name : John, dept : CEO, salary :30000 ]

Employee :[ Name : Robert, dept : Head Sales, salary :20000 ]

Employee :[ Name : Richard, dept : Sales, salary :10000 ]

Employee :[ Name : Rob, dept : Sales, salary :10000 ]

Employee :[ Name : Michel, dept : Head Marketing, salary :20000 ]

Employee :[ Name : Laura, dept : Marketing, salary :10000 ]

Employee :[ Name : Bob, dept : Marketing, salary :10000 ]

以上就是java组合模式写法(java中的组合的概念)的相关内容了,更多精彩请关注我们!!

相关内容

热门资讯

创新高!去年我国批准创新药76... 记者今天从国家药监局获悉,2025年我国已批准上市的创新药达76个,大幅超过2024年全年48个,创...
也门政府军收复哈德拉毛省第二大... △也门东南部哈德拉毛省穆卡拉港(资料图)也门政府消息人士和当地居民3日称,也门政府军收复哈德拉毛省第...
特斯拉电动车年销量首次被比亚迪... 当地时间1月2日,美国电动汽车制造商特斯拉公司公布的数据显示,该公司2025年全球交付汽车163.6...
元旦假期,全社会跨区域人员流动... 记者从交通运输部获悉:1月1日至1月3日,全社会跨区域人员流动量预计5.9亿人次(日均1.98亿人次...
委内瑞拉首都加拉加斯传出数声爆... 据总台记者消息,当地时间1月3日凌晨2点多,委内瑞拉首都加拉加斯多个地区接连传出爆炸声。目前爆炸原因...
2026年大陆高校面向港澳研究... 2026年内地面向港澳地区研究生招收程序将于明日(4日)启动。考生须以实名注册“学信网”账号,并用“...
济南景区周边“花车”不见了!摆... 2026年1月1日,元旦假期首日,也是济南大明湖、趵突泉周边实施动力驱动三轮车、低速四轮车禁行政策后...
印航一飞行员“酒驾”未遂,加方... 印度航空公司一名飞行员2025年12月23日执飞一趟从加拿大温哥华飞往印度新德里的航班前,在呼气酒精...
浙江9月大宝宝昏睡不醒,送医查... 1月2日,浙江省金华市公安局江南分局发布警情通报:近日,我局接到辖区居民徐某报警称,家中的育儿嫂邹某...
“彩绘抬腿陶马”倾倒腿部断裂,... 洛阳博物馆1月2日发布情况说明:2026年1月1日18时许,我馆基本陈列展厅内的“彩绘抬腿陶马”因原...
以二舅命名的“宝华”月季,初审... 近日,一个给新品种月季征名的活动突然火了。“刘宝华月季,因为我二舅叫刘宝华”的留言,获得最高赞数。“...
多地将试点有奖发票!单张奖金最... 近日,财政部、商务部、国家税务总局联合印发通知,支持50个左右城市开展有奖发票试点工作,试点城市自行...
年产450万吨油当量!“深海一... 我国海上最大气田“深海一号”近期完成投产以来的第100船原油外输工作,2025年气田年产油气量突破4...
瑞士火灾失踪人数不明 遇难者身... 当地时间1月2日,瑞士调查人员表示,瓦莱州克朗-蒙大拿“星座”酒吧火灾所有遇难者的身份确认工作正在展...
韩国法院签发对尹锡悦的追加拘捕... 据央视新闻消息,当地时间1月2日,韩国首尔中央地方法院以“有湮灭证据的忧虑”为由,签发对前总统尹锡悦...
国防部新闻发言人张晓刚就境外炒... 国防部新闻发言人张晓刚就境外炒作“正义使命-2025”演习答记者问。记者:前不久,中国人民解放军东部...
元旦假期首日 全社会跨区域人员... 2026年1月1日,全社会跨区域人员流动量20747.5万人次,环比下降0.1%,同比增长20.3%...
丹麦首相在新年讲话中以“不点名... 当地时间1月1日,丹麦首相弗雷泽里克森在发表新年讲话时说,丹麦“最亲密的盟友”企图接管“另一个民族”...
伊朗举行活动 纪念苏莱马尼遭暗... 2020年1月3日,伊朗高级将领、伊朗伊斯兰革命卫队下属“圣城旅”指挥官苏莱马尼在伊拉克遭美军袭击身...
计划加开旅客列车785列!这些... 1月1日,全国铁路发送旅客1856万人次,运输安全平稳有序。1月2日,全国铁路预计发送旅客1260万...