设计模式之GOF23组合模式

组合模式Composite

使用组合模式的场景:把部分和整体的关系用树形结构表示,从而使客户端可以使用统一的方式处理对象和整体对象(文件和文件夹)

组合模式核心:

-抽象构件(Component)角色:定义了叶子和容器的共同点

-叶子(Leaf)构件角色:无子节点

-容器(Composite)构件角色:有容器特征:可以包含子节点或者其他容器

例如杀毒软件:

public abstract class  File {
     protected String name;
  abstract void killVirus();//杀毒
  public File(String name) {
   this.name = name;
  }
  
}
class ImageFile extends  File{
 public ImageFile(String name) {
  super(name);
 }
 public void killVirus() {
  System.out.println("对图片"+this.name+".jpg进行杀毒");
 }
}
class TextFile extends  File{
 public TextFile(String name) {
  super(name);
 }
 public void killVirus() {
  System.out.println("对文本"+this.name+".txt进行杀毒");
 }
}
class Folder extends File{
 List<File> files;
 public Folder(String name) {
  super(name);
  files=new ArrayList<File>();
 }
 public void add(File f) {
  files.add(f);
 }
 public void remove(int index) {
  files.remove(index);
 }
 public File getChild(int index) {
  return files.get(index);
 }
 void killVirus() {
  System.out.println("对"+this.name+"进行查杀");
  for(File f:files) {//天然的递归
   f.killVirus();
  }
 }
}

public class Client {
  public static void main(String[] args) {
   File f2,f3,f4;
   Folder f1=new Folder("我的收藏");
   Folder f5=new Folder("我的小说");
   f2=new ImageFile("小张");
   f3=new TextFile("武林外传");
   f4=new TextFile("家有儿女");
   f5.add(f3);
   f5.add(f4);
   f1.add(f2);
   f1.add(f5);
   f1.killVirus();
  }
}

原文地址:https://www.cnblogs.com/code-fun/p/11334569.html

时间: 2024-10-13 20:30:55

设计模式之GOF23组合模式的相关文章

设计模式C++实现——组合模式

模式定义: 组合模式允许你将对象组合成树形结构来表现"整体/部分"层次结构.组合能让客户以一致的方式处理个别对象以及对象组合. 这个模式能够创建一个树形结构,在同一个结构中处理嵌套菜单和菜单项组.通过菜单和项放在相同结构中,我们创建了一个"整体/部分"层次结构,即由菜单和菜单项组成的对象树.使用组合结构,我们能把相同的操作应用在组合和个别对象上.换句话说,在大多数情况下,我们可以忽略对象组合和个别对象之间的差别. 模式结构: Component: 为组合中的对象声明

【JS 设计模式 】用组合模式来实现树形导航--代码结构思路分析(一)

树导航效果图: 组合模式的描述: 将对象组合成树形结构以表示"部分-整体"的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性. 我们把部分用Leaf表示, 把整体用Composite表示.组合模式是有一定规律的,在实现树导航的情况下,Composite需要包含一个以上Leaf,也可以包含一个以上Leaf和一个以Composite,为什么说要包含一个以上的,如果Composite不包含任何子child的话那么它就是Leaf,Leaf表示是最后一层结节. 树形导航代码片段:

【JS 设计模式 】用组合模式来实现树形导航--JS代码结构思路分析(二)

[JS 设计模式 ]用组合模式来实现树形导航--代码结构思路分析(一) 根据上一节中的HTML代码结构我们通过JS来渲染HTML代码,我们先提供一下JS的代码片段,这代码代码不是一个完整的代码是经过简化的.通过JS代码来分析如何组装HTML的 Composite类型的代码: function TreeComposite(id, name, total, level, last) { var root = document.createDocumentFragment(); var panel =

C#设计模式之九组合模式(Composite Pattern)【结构型】

原文:C#设计模式之九组合模式(Composite Pattern)[结构型] 一.引言 今天我们要讲[结构型]设计模式的第四个模式,该模式是[组合模式],英文名称是:Composite Pattern.当我们谈到这个模式的时候,有一个物件和这个模式很像,也符合这个模式要表达的意思,那就是"俄罗斯套娃"."俄罗斯套娃"就是大的瓷器娃娃里面装着一个小的瓷器娃娃,小的瓷器娃娃里面再装着更小的瓷器娃娃,直到最后一个不能再装更小的瓷器娃娃的那个瓷器娃娃为止(有点绕,下面我会

[js高手之路]设计模式系列课程-组合模式+寄生组合继承实战新闻列表

所谓组合模式,就是把一堆结构分解出来,组成在一起,现实中很多这样的例子,如: 1.肯德基套餐就是一种组合模式, 比如鸡腿堡套餐,一般是是由一个鸡腿堡,一包薯条,一杯可乐等组成的 2.组装的台式机同理,由主板,电源,内存条,显卡, 机箱,显示器,外设等组成的 把一个成型的产品组成部件,分成一个个独立的部件,这种方式可以做出很多灵活的产品,这就是组合模式的优势 比如:家用台式机电脑,要求配置比较低, 这个时候只需要主板+电源+内存条+机箱+显示器+外设就可以了,不需要配置独立显卡 鸡腿堡+鸡翅+紫薯

设计模式整理_组合模式

组合模式允许你将对象组成树形结构,来表现整体和部分的联系.组合能让客户以一致的方式处理个别对象和对象的组合. 组合模式将整体称为组合.(类似于树结构中的树),将组合下面没有其他元素相连的物件称为叶结点.其中,组合和叶结点有着共同的父类,可以将两者所有的方法抽象到父类中,并且对方法有默认的实现,这样如果叶结点或者组合不想实现某个方法的时候,就可以不实现方法.通过将菜单和项放在相同的结构中,我们创建了一个整体/部分的层次结构,即由菜单项和菜单组成的对象树.可以将它视为一个整体.任何一个菜单都可能是组

设计模式15:组合模式

组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次.这种类型的设计模式属于结构型模式,它创建了对象组的树形结构. 透明方式与安全方式: 透明方式: 父类包含所有子类的方法,不需要该方法的子类可以选择throw Exception. 优点:各个子类完全一致,可以使用父类接口调用 缺点:子类实现无意义的方法 安全方式: 子类特有的方法,留到具体的子类中再去实现. 优点:子类方法有意义.

设计模式学习心得&lt;组合模式 Composite&gt;

组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次.这种类型的设计模式属于结构型模式,它创建了对象组的树形结构. 这种模式创建了一个包含自己对象组的类.该类提供了修改相同对象组的方式. 概述 意图 将对象组合成树形结构以表示"部分-整体"的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 主要解决 它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客

c#设计模式之:组合模式(Composite)

一:引言 在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理,因为目录客园包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象和复合对象在功能上区别,导致在操作过程中必须区分简单对象和复合对象,这样就导致客户调用带来不必要的麻烦,然而作为客户,他们希望能始终一致的对待简单对象和复合对象,组合模式就是解决这样的问题,下面让我们看看组合模式是怎么样解决这个问题的 二.组合模式的详细介绍 2.1组合模式的定义 将对象组合成树形结构以表示“部分-整