zoukankan      html  css  js  c++  java
  • 【GOF23设计模式】组合模式

    来源:http://www.bjsxt.com/ 
    一、【GOF23设计模式】_组合模式、树状结构、杀毒软件架构、JUnite底层架构、常见开发场景

    使用组合模式的场景

     1 package com.test.composite;
     2 /**
     3  * 抽象组件
     4  */
     5 public interface Component {
     6     void operation();
     7 }
     8 
     9 //叶子组件
    10 interface Leaf extends Component{
    11 }
    12 //容器组件
    13 interface Composite extends Component{
    14     void add(Component c);
    15     void remove(Component c);
    16     Component getChild(int index);
    17 }

    组合模式工作流程分析

     1 package com.test.composite;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 /**
     7  * 抽象组件构建
     8  */
     9 public interface AbstractFile {
    10     void killVirus();//杀毒
    11 }
    12 
    13 //叶子组件
    14 class ImageFile implements AbstractFile {
    15     private String name;
    16 
    17     public ImageFile(String name) {
    18         super();
    19         this.name = name;
    20     }
    21 
    22     @Override
    23     public void killVirus() {
    24         System.out.println("---图像文件:" + name + ",进行查杀");
    25     }
    26 }
    27 class TextFile implements AbstractFile {
    28     private String name;
    29 
    30     public TextFile(String name) {
    31         super();
    32         this.name = name;
    33     }
    34 
    35     @Override
    36     public void killVirus() {
    37         System.out.println("---文本文件:" + name + ",进行查杀");
    38     }
    39 }
    40 class VideoFile implements AbstractFile {
    41     private String name;
    42 
    43     public VideoFile(String name) {
    44         super();
    45         this.name = name;
    46     }
    47 
    48     @Override
    49     public void killVirus() {
    50         System.out.println("---视频文件:" + name + ",进行查杀");
    51     }
    52 }
    53 
    54 //容器组件
    55 class Folder implements AbstractFile {
    56     private String name;
    57     //定义容器:用来存放本容器构建下的子节点
    58     private List<AbstractFile> list = new ArrayList<AbstractFile>();
    59 
    60     public Folder(String name) {
    61         super();
    62         this.name = name;
    63     }
    64 
    65     public void add(AbstractFile file){
    66         list.add(file);
    67     }
    68     public void remove(AbstractFile file){
    69         list.remove(file);
    70     }
    71     public AbstractFile getChild(int index){
    72         return list.get(index);
    73     }
    74 
    75     @Override
    76     public void killVirus() {
    77         System.out.println("---文件夹:" + name + "进行查杀");
    78 
    79         for (AbstractFile file : list) {//递归
    80             file.killVirus();
    81         }
    82     }
    83 }
     1 package com.test.composite;
     2 
     3 public class Client {
     4     public static void main(String[] args) {
     5         AbstractFile f2,f3,f4,f5;
     6         Folder f1 = new Folder("我的收藏");
     7 
     8         f2 = new ImageFile("大头像.jpg");
     9         f3 = new TextFile("Hello.txt");
    10         f1.add(f2);//我的收藏下
    11         f1.add(f3);
    12 
    13         Folder f11 = new Folder("电影");
    14         f4 = new VideoFile("笑傲江湖.avi");
    15         f5 = new VideoFile("神雕侠侣.avi");
    16         f11.add(f4);//电影下
    17         f11.add(f5);
    18         f1.add(f11);//我的收藏下
    19 
    20         f1.killVirus();
    21     }
    22 }
    控件台输出:
    ---文件夹:我的收藏进行查杀
    ---图像文件:大头像.jpg,进行查杀
    ---文本文件:Hello.txt,进行查杀
    ---文件夹:电影进行查杀
    ---视频文件:笑傲江湖.avi,进行查杀
    ---视频文件:神雕侠侣.avi,进行查杀

    开发中的应用场景

    Junit单元测试框架底层设计

  • 相关阅读:
    javascript通用循环遍历方法forEach
    伪数组
    引用和基本类型
    谈谈Javascript的this指针
    理解内存分配
    理解undefined和null
    getElementsByClassName实现
    NSubstitute完全手册(十五)自动递归模拟
    NSubstitute完全手册(十七)参数匹配器上的操作
    NSubstitute完全手册(九)检查接收到的调用
  • 原文地址:https://www.cnblogs.com/erbing/p/5802475.html
Copyright © 2011-2022 走看看