贵阳专业做网站公司有哪些,搜索引擎优化ppt,成都网站建设网,黄冈网站组合模式
什么是组合模式
组合模式#xff08;Composite Pattern#xff09;允许你将对象组合成树形结构以表示“部分-整体”的层次结构#xff0c;使得客户端以统一的方式处理单个对象和对象的组合。组合模式让你可以将对象组合成树形结构#xff0c;并且能像单独对象一…组合模式
什么是组合模式
组合模式Composite Pattern允许你将对象组合成树形结构以表示“部分-整体”的层次结构使得客户端以统一的方式处理单个对象和对象的组合。组合模式让你可以将对象组合成树形结构并且能像单独对象一样使用它们。
组合模式使用场景
把部分和整体的关系用树形结构来表示从而是客户端可以使用统一的方式处理部分对象和整体对象。
组合模式核心
抽象构件Component角色:定义了叶子和容器构件的共同特点 叶子Leaf构件角色:无子节点 容器Composite构件角色有容器特征可以包含子节点 组合模式工作流程分析
组合模式为处理树形结构提供了完美的解决方案描述了如何将容器和叶子进行递归组合是的用户在使用是可以一致性的对待容器和叶子当容器对象的指定方法被调用时将遍历整个树形结构寻找也抱恨这个方法的成员并调用执行其中使用了递归调用的机制对整个结构进行处理。
代码实现结构
Component.java
// 抽象构件
public interface Component {// 相同行为操作void operation();
}Leaf.java
// 叶子
public class Leaf implements Component {Overridepublic void operation() {System.out.println(叶子单独操作);}
}
Composite.java
import java.util.ArrayList;
import java.util.List;// 容器节点
public class Composite implements Component{// 作为容器存储子节点信息private ListComponent components new ArrayList();public Composite(ListComponent components) {this.components components;}public ListComponent getComponents() {return components;}public void setComponents(ListComponent components) {this.components components;}Overridepublic void operation() {System.out.println(容器构件操作);for (Component component : components) {// 递归执行叶子节点操作component.operation();}}
}案例
模拟杀毒软件的架构设计
UML 实现代码
AbstractFile.java
// 抽象组件
public interface AbstractFile {// 杀毒功能void killVirus();
}ImagesFile.java
// 图片类型文件
public class ImagesFile implements AbstractFile{private String name;public ImagesFile(String name) {this.name name;}Overridepublic void killVirus() {System.out.printf(图片类型文件-%s-进行扫毒%n,this.name);}
}TxtFile.java
// 文本类型文件
public class TxtFile implements AbstractFile{private String name;public TxtFile(String name) {this.name name;}Overridepublic void killVirus() {System.out.printf(文本类型文件-%s-进行扫毒%n,this.name);}
}
VideoFile.java
// 视频类型文件
public class VideoFile implements AbstractFile{private String name;public VideoFile(String name) {this.name name;}Overridepublic void killVirus() {System.out.printf(视频类型文件-%s-进行扫毒%n,this.name);}
}Floder.java
import java.util.ArrayList;
import java.util.List;// 容器构件目录
public class Floder implements AbstractFile{private String name;// 子节点private ListAbstractFile lists new ArrayListAbstractFile();public Floder(String name, ListAbstractFile lists) {this.name name;this.lists lists;}Overridepublic void killVirus() {System.out.printf(扫描当前目录-%s%n,this.name);for(AbstractFile abstractFile : lists){abstractFile.killVirus();}}
}TestClient.java
import java.util.ArrayList;
import java.util.List;public class TestClient {public static void main(String[] args) {AbstractFile file1 new TxtFile(花无缺.TXT);AbstractFile file2 new ImagesFile(花无缺.png);AbstractFile file3 new ImagesFile(花无缺.avi);ListAbstractFile list new ArrayListAbstractFile();list.add(file1);list.add(file2);list.add(file3);Floder floder new Floder(huawuque,list);AbstractFile file4 new TxtFile(小鱼儿.TXT);AbstractFile file5 new ImagesFile(小鱼儿.png);AbstractFile file6 new ImagesFile(小鱼儿.avi);ListAbstractFile list1 new ArrayListAbstractFile();list1.add(file4);list1.add(file5);list1.add(file6);Floder floder2 new Floder(xuaiyuer,list1);ListAbstractFile list3 new ArrayListAbstractFile();list3.add(floder);list3.add(floder2);Floder floder3 new Floder(绝代双骄,list3);floder3.killVirus();}
}执行结果 gitee源码 git clone https://gitee.com/dchh/JavaStudyWorkSpaces.git