// 重写add
@Override
protected void add(OrganizationComponent organizationComponent) {
organizationComponents.add(organizationComponent);
}
// 重写remove
@Override
protected void remove(OrganizationComponent organizationComponent) {
organizationComponents.remove(organizationComponent);
}
@Override
public String getName() {
return super.getName();
}
@Override
public String getDes() {
return super.getDes();
}
// print方法,就是输出University 包含的学院
@Override
protected void print() {
System.out.println(“--------------” + getName() + “--------------”);
//遍历 organizationComponents
for (OrganizationComponent organizationComponent : organizationComponents) {
organizationComponent.print();
}
}
}
3、容器构件 --> 学院类
package designMode.advance.composite;
import java.util.ArrayList;
import java.util.List;
public class College extends OrganizationComponent {
//List 中 存放的Department
List organizationComponents = new ArrayList();
// 构造器
public College(String name, String des) {
super(name, des);
}
// 重写add
@Override
protected void add(OrganizationComponent organizationComponent) {
// 将来实际业务中,Colleage 的 add 和 University add 不一定完全一样
organizationComponents.add(organizationComponent);
}
// 重写remove
@Override
protected void remove(OrganizationComponent organizationComponent) {
organizationComponents.remove(organizationComponent);
}
@Override
public String getName() {
return super.getName();
}
@Override
public String getDes() {
return super.getDes();
}
// print方法,就是输出University 包含的学院
@Override
protected void print() {
System.out.println(“--------------” + getName() + “--------------”);
//遍历 organizationComponents
for (OrganizationComponent organizationComponent : organizationComponents) {
organizationComponent.print();
}
}
}
4、叶子节点 --> 专业类
package designMode.advance.composite;
public class Department extends OrganizationComponent {
//没有集合
public Department(String name, String des) {
super(name, des);
}
//add , remove 就不用写了,因为他是叶子节点
@Override
public String getName() {
return super.getName();
}
@Override
public String getDes() {
return super.getDes();
}
@Override
protected void print() {
System.out.println(getName());
}
}
5、测试类
package designMode.advance.composite;
public class Client {
public static void main(String[] args) {
//从大到小创建对象 学校
OrganizationComponent university = new University(“清华大学”, " 中国顶级大学 ");
//创建 学院
OrganizationComponent computerCollege = new College(“计算机学院”, " 计算机学院 ");
OrganizationComponent infoEngineercollege = new College(“信息工程学院”, " 信息工程学院 ");
//创建各个学院下面的系(专业)
computerCollege.add(new Department(“软件工程”, " 软件工程不错 "));
computerCollege.add(new Department(“网络工程”, " 网络工程不错 "));
computerCollege.add(new Department(“计算机科学与技术”, " 计算机科学与技术是老牌的专业 "));
//
infoEngineercollege.add(new Department(“通信工程”, " 通信工程不好学 "));
infoEngineercollege.add(new Department(“信息工程”, " 信息工程好学 "));
//将学院加入到 学校
university.add(computerCollege);
university.add(infoEngineercollege);
university.print();
//infoEngineercollege.print();
}
}
六、Java集合类HashMap 源码分析
HashMap 提供了putAll方法,可以将另一个Map对象放入自己的存储空间中,如有相同的key则会覆盖之前的key值所对应的value值。
1、代码实例
package designMode.advance.composite;
import java.util.HashMap;
import java.util.Map;
public class HashMapComposite {
public static void main(String[] args) {
Map<Integer,String> universityMap = new HashMap<>();
universityMap.put(1,“清华大学”);
universityMap.put(2,“北京大学”);
universityMap.put(3,“辽宁石油化工大学”);
System.out.println("universityMap: " + universityMap);
Map<Integer,String> collegeMap = new HashMap<>();
collegeMap.put(1,“计算机学院”);
collegeMap.put(4,“信息工程学院”);
System.out.println("collegeMap: " + collegeMap);
universityMap.putAll(collegeMap);
System.out.println(“universityMap.putAll(collegeMap),”+universityMap);
}
}
2、控制台输出
3、源码分析
putAll接收的参数为父类Map类型,所以hashmap是一个容器类,map的子类为叶子类,当然如果map的其它子类也实现了putAll方法,那么他们既是容器类,又都是叶子类;
同理,ArrayList 中的 addAll(Collection<? extends E> c) 方法也是一个组合模式的应用;
七、Mybatis SqlNode中的组合模式
MyBatis 的强大特性之一便是它的动态SQL,其通过 if, choose, when, otherwise, trim, where, set, foreach 标签,可组合成非常灵活的SQL语句,从而提高开发人员的效率。
动态SQL – IF
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
AND title like #{title}
AND author_name like #{author.name}
动态SQL – choose, when, otherwise
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
AND title like #{title}
AND author_name like #{author.name}
AND featured = 1
动态SQL – where
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/a84a3be42cf79435b46778a34f1a156e.jpeg)
最后
还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
,真正体系化!**
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/a84a3be42cf79435b46778a34f1a156e.jpeg)
最后
还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
[外链图片转存中…(img-b53YDtrp-1712260709829)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!