组合模式

2019-05-07  本文已影响0人  Davisxy

使用组合模式的场景:

小栗子

package com.principle.composite;

public interface Component {
    void operation();
}

// 叶子组件
interface Leaf extends Component {

}

// 容器组件
interface Composite extends Component {
    void add(Component c);

    void remove(Component c);

    Component getChild(int index);
}

组合模式工作流程分析:

使用组合模式,模拟杀毒软件架构设计

package com.principle.composite;

import java.util.ArrayList;
import java.util.List;

public interface AbstarctFile {
    void killVirus();
}

class ImageFile implements AbstarctFile{

    private String name;
    
    public ImageFile(String name) {
        super();
        this.name = name;
    }

    @Override
    public void killVirus() {
        System.out.println("--图像文件:"+name+",进行查杀");
    }
    
}
class TextFile implements AbstarctFile{
    
    private String name;
    
    public TextFile(String name) {
        super();
        this.name = name;
    }
    
    @Override
    public void killVirus() {
        System.out.println("--文本文件:"+name+",进行查杀");
    }
    
}
class VideoFile implements AbstarctFile{
    
    private String name;
    
    public VideoFile(String name) {
        super();
        this.name = name;
    }
    
    @Override
    public void killVirus() {
        System.out.println("--视频文件:"+name+",进行查杀");
    }
    
}

class Folder implements AbstarctFile{
    
    private String name;
    //定义容器,用来存放本容器构建下的子节点
    private List<AbstarctFile> list=new ArrayList<AbstarctFile>();
    
    public Folder(String name) {
        super();
        this.name = name;
    }
    
    public void add(AbstarctFile file){
        list.add(file);
    }
    public void remove(AbstarctFile file){
        list.remove(file);
    }
    
    public AbstarctFile getChild(int index){
        return list.get(index);
    }
    

    @Override
    public void killVirus() {
        System.out.println("---文件夹:"+name+",进行查杀");
        for (AbstarctFile abstarctFile : list) {
            abstarctFile.killVirus();
        }
    }
    
}
package com.principle.composite;

public class Client {
    public static void main(String[] args) {
        AbstarctFile f2,f3,f4,f5;
        Folder f1=new Folder("我的收藏");
        
        f2=new ImageFile("xx的头像.jpg");
        f3=new TextFile("Hello.txt");
        f1.add(f2);
        f1.add(f3);
        
        Folder f11=new Folder("电影");
        f4=new VideoFile("神雕侠侣.mp4");
        f5=new VideoFile("笑傲江湖.mp4");
        f11.add(f4);
        f11.add(f5);
        
        f1.add(f11);
        
        f1.killVirus(); 
    }
}
结果打印:
---文件夹:我的收藏,进行查杀
--图像文件:xx的头像.jpg,进行查杀
--文本文件:Hello.txt,进行查杀
---文件夹:电影,进行查杀
--视频文件:神雕侠侣.mp4,进行查杀
--视频文件:笑傲江湖.mp4,进行查杀

开发中的应用场景:

上一篇 下一篇

猜你喜欢

热点阅读