zoukankan      html  css  js  c++  java
  • 设计模式之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();
      }
    }

  • 相关阅读:
    VS2010引用App_Code下的类文件问题解决方法
    Sql server 2008 sa用户开启教程
    ASP.NET中App_Code,App_Data等文件夹的作用
    错误提示: (provider: Named Pipes Provider, error: 40 Could not open a connection to SQL Server)
    treeview展开一个节点就关闭其他节点
    ASP.NET AJAX Toolkit的安装过程
    c++推荐读物
    for()的多参数
    模板函数I n p u t
    这次真的是下定决心了
  • 原文地址:https://www.cnblogs.com/code-fun/p/11334569.html
Copyright © 2011-2022 走看看