美文网首页
组合模式

组合模式

作者: 金煜博 | 来源:发表于2021-05-21 23:30 被阅读0次

    什么是组合模式

    将对象通过容器以树形结构的方式进行递归组合

    示例图

    图片.png

    示例场景

    以树形结构的方式将电影分成动作类 爱情类电影,动作类电影包含速度与激情9 扫黑决战。爱情类电影包含我要我们在一起 情书。


    场景示例图.png

    示例代码

    1.创建Film电影抽象类

    public abstract class Film {
        private  String  name;
    
        public Film(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public  abstract  void show();
    }
    

    2.创建ActionFilm动作类电影和LoveFilm爱情类电影

    public class ActionFilm extends  Film {
    
        public ActionFilm(String filmName) {
            super(filmName);
        }
    
        @Override
        public void show() {
            System.out.println("动作类电影:"+super.getName());
        }
    }
    
    public class LoveFilm extends Film {
    
        public LoveFilm(String filmName) {
            super(filmName);
        }
    
        @Override
        public void show() {
            System.out.println("爱情类电影:" + super.getName());
        }
    }
    

    3.创建Container对象容器类

    public class Container extends Film {
        private List<Film> listFilm;
    
        public Container(String filmType) {
            super(filmType);
            listFilm = new ArrayList<>();
        }
    
        @Override
        public void show() {
            for (Film f : listFilm) {
                f.show();
            }
        }
    
        public void add(Film film){
            listFilm.add(film);
        }
    }
    

    4.创建启动类

    public class Test {
        public static void main(String[] args) {
            Container containerType = new Container("电影类别");
            Container containerAction = new Container("动作类电影");
            Container containerLove = new Container("爱情类电影");
            ActionFilm sdjq9 = new ActionFilm("速度与激情9");
            ActionFilm shjz = new ActionFilm("扫黑决战");
            LoveFilm wywmzyq = new LoveFilm("我要我们在一起");
            LoveFilm qs = new LoveFilm("情书");
            //将动作类电影添加到电影类别中
            containerType.add(containerAction);
            //将爱情类电影添加到电影类别中
            containerType.add(containerLove);
            //将速度与激情9 扫黑决战电影添加到动作类电影中
            containerAction.add(sdjq9);
            containerAction.add(shjz);
            //将我要我们在一起 情书电影添加到爱情电影中
            containerLove.add(qs);
            containerLove.add(wywmzyq);
            System.out.println("-------------------------------------------查看所有类别的电影");
            containerType.show();
            System.out.println("-------------------------------------------查看所有动作类电影");
            containerAction.show();
            System.out.println("-------------------------------------------查看所有爱情类电影");
            containerLove.show();
        }
    }
    

    5.运行结果

    图片.png

    6.断点调试结果

    图片.png

    相关文章

      网友评论

          本文标题:组合模式

          本文链接:https://www.haomeiwen.com/subject/zeigjltx.html