基于JAVA的设计模式之组合模式
- 概念
将所有对象组合成一种树形结构,有分支节点、叶子节点,分支节点可以有自己的子节点,子节点可以是分支节点、叶子节点,可以进行增删的操作,而叶子节点不可以。比如文件夹就是一个分支节点,而文件就是一个叶子节点。用于遍历组织结构或者处理树形对象。父类引用指向派生类对象(Compoent->Document,Folder)。

- 类图

- 代码
public abstract class Component {
public void add(Component component){
//新建文件夹或文件
}
public void remove(Component component){
//删除文件夹或文件
}
public void print(){
//打印
}
public String getName(){
//名字
return null;
}
public String getType(){
//类型
return null;
}
}
//文件类 叶子类 不能操作孩子 即不能有add remove
public class Document extends Component {
private String name;
private String type;
public Document(String name,String type){
this.name=name;
this.type=type;
}
@Override
public void print() {
System.out.println(type+":"+name);
}
@Override
public String getName() {
return this.name;
}
@Override
public String getType() {
return this.type;
}
}
//文件夹类 孩子可以是文件夹也可以是文件
public class Folder extends Component{
private String name;
private String type;
private List<Component>components=new ArrayList<Component>();
public Folder(String name,String type){
this.name=name;
this.type=type;
}
@Override
public void add(Component component) {
components.add(component);
} @Override
public void remove(Component component) {
components.remove(component);
} @Override
public void print() {
System.out.println(type+":"+name);
for (Component component:
components) {
component.print();
}
} @Override
public String getName() {
return this.name;
} @Override
public String getType() {
return this.type;
}
}
public class Main {
public static void main(String[] args) {
Folder desktop=new Folder("桌面","文件夹");
Folder c=new Folder("c:","文件夹");
Folder childFolder=new Folder("新建文件夹","文件夹");
Document d1=new Document("pig.jpg","文件");
Document d2=new Document("duck.png","文件");
childFolder.add(d1);
childFolder.add(d2);
c.add(childFolder);
Folder d=new Folder("d:","文件夹");
Document d3=new Document("git.txt","文件");
d.add(d3);
Folder e=new Folder("e:","文件夹");
desktop.add(c);
desktop.add(d);
desktop.add(e);
desktop.print();
}
}
基于JAVA的设计模式之组合模式的更多相关文章
- 基于JAVA的设计模式之代理模式
概念 王宝强有一个经纪人叫宋喆,这个经纪人很吊,可以代理王宝强做一系列的事情,与粉丝活动.王宝强的微博维护.安排王宝强的行程以及什么什么等等.如果王宝强一个人做岂不是累死.通过这个代理人为王宝强节省了 ...
- 基于java的设计模式入门(1)——为什么要学习设计模式
大年初一,楼主在这里给大家拜年,祝大家码上升职加薪,码上有对象结婚,码上有车有房,幸福安康. 过完年,回学校注册报道之后,大概就要回深圳到公司开始实习了.提高自己,无非就有两种方式,一是看书学习,二是 ...
- C#设计模式(10)——组合模式(Composite Pattern)
一.引言 在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象 ...
- c++设计模式15 --组合模式
今天研究了一下设计模式15 组合模式 本人是菜鸟一枚,所以一开始完全不懂组合究竟是什么意思.先上图一张,树形结构图: 文档说,如果想做出这样的结构,通常考虑组合模式.那是为什么呢?现在让我们看一下组合 ...
- 乐在其中设计模式(C#) - 组合模式(Composite Pattern)
原文:乐在其中设计模式(C#) - 组合模式(Composite Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 组合模式(Composite Pattern) 作者:weba ...
- JavaScript设计模式之----组合模式
javascript设计模式之组合模式 介绍 组合模式是一种专门为创建Web上的动态用户界面而量身制定的模式.使用这种模式可以用一条命令在多个对象上激发复杂的或递归的行为.这可以简化粘合性代码,使其更 ...
- C#设计模式(10)——组合模式(Composite Pattern)(转)
一.引言 在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象 ...
- C#设计模式:组合模式(Composite Pattern)
一,C#设计模式:组合模式(Composite Pattern) using System; using System.Collections.Generic; using System.Linq; ...
- java设计模式5.组合模式、门面模式、享元模式、桥接模式
组合模式 在面向对象的语言中,树结构有着巨大的威力,一个基于继承的类型的等级结构便是一个数结构,一个基于合成的对象结构也是一个数结构.组合模式将部分与整体的关系用树结构表示出来,使得客户端把一个个单独 ...
随机推荐
- ACM学习历程—HDU2222 Keywords Search(字典树)
Keywords Search Description In the modern time, Search engine came into the life of everybody like G ...
- python find()用法
案例: ### 1 ### str = "01213456" if str.find("23"): print "YES!" else: p ...
- 梯度算子(普通的+Robert + sobel + Laplace)
1.水平垂直差分法: 2.Robert 算子梯度 3.sobel算子 4.拉普拉斯算子
- 怎么在docker容器的mysql的编码格式变为utf8
第一个方法: 1. 编辑MySql的配置文件 MySql的配置文件Windows下一般在系统目录下或者在MySql的安装目录下名字叫my.ini,可以搜索,Linux下一般是/etc/my.cnf ...
- 条款32:确定你的public继承塑模出is-a的关系
Make sure public inheritance models "is –a " 如果令clsss D 以public的形式继承class B,你便是告诉编译器说,每一个类 ...
- linux下libphenom的测试代码
使用说明:测试使用libphenom库的字符串追加函数,效率是strcat的60多倍.所以在进行大量的字符串累加的时候可以考虑使用libphenom库 依赖库: ck-.tar.gz cmake-. ...
- 1. docker安装
前提 系统:我这边都使用虚拟机安装的CentOS7,具体安装可以参考:Windows安装Linux虚拟机(CentOS7) yum:推荐更新下yum:yum update;我们这边CentOS7自带d ...
- PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
一般在默认的普通PHP文件中输出一个未定义声明的变量是不会报错误的,但在codeigniter框架下却要报错误,这对于想集成 添加 和 修改 页面于一体的”懒人”很不方便,由于是初学者开始还想怎么在代 ...
- 小程序与Spring项目数据交互
上一篇博客刚说了利用Postman来测试Spring Boot项目,测试通过后就可以和小程序进行交互了. 首先要在微信开发者工具里面,点击"详情",勾选上"不校验合法域名 ...
- webbrowser 控件实现WinForm与WebForm交互
WebBrowser 控件可以让你装载Windows Form 应用程序中的 Web 网页和其它采用浏览器的文件.可以使用webbrowser 控件将现有的web框架控制项加入至 Windows Fo ...