设计模式之GOF23组合模式

Posted code-fun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之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();
  

以上是关于设计模式之GOF23组合模式的主要内容,如果未能解决你的问题,请参考以下文章

GOF23设计模式之组合模式(composite)

java设计模式 GOF23 09 组合模式

GOF23设计模式之单例模式

GoF设计模式 | 组合模式

GOF23设计模式之适配器模式

GOF 23设计模式之(结构型模式二)