美文网首页
设计模式-组合(Composite)模式

设计模式-组合(Composite)模式

作者: qyfl | 来源:发表于2019-11-14 16:56 被阅读0次

    主要角色

    • 抽象聚合类
    • 复合物

    职责

    类的层次结构更清晰和明确。

    类图

    类关系示意图

    代码

    public abstract class CatalogComponent {
        public void add(CatalogComponent catalogComponent){
            throw new UnsupportedOperationException("不支持添加操作");
        }
    
        public void remove(CatalogComponent catalogComponent){
            throw new UnsupportedOperationException("不支持删除操作");
        }
        
        public String getName(CatalogComponent catalogComponent){
            throw new UnsupportedOperationException("不支持获取名称操作");
        }
        
        public double getPrice(CatalogComponent catalogComponent){
            throw new UnsupportedOperationException("不支持获取价格操作");
        }
        
        public void print(){
            throw new UnsupportedOperationException("不支持打印操作");
        }
    }
    ---
    public class CourseCatalog extends CatalogComponent {
        private List<CatalogComponent> items = new ArrayList<CatalogComponent>();
        private String name;
        private Integer level;
    
    
        public CourseCatalog(String name,Integer level) {
            this.name = name;
            this.level = level;
        }
    
        @Override
        public void add(CatalogComponent catalogComponent) {
            items.add(catalogComponent);
        }
    
        @Override
        public String getName(CatalogComponent catalogComponent) {
            return this.name;
        }
    
        @Override
        public void remove(CatalogComponent catalogComponent) {
            items.remove(catalogComponent);
        }
    
        @Override
        public void print() {
            System.out.println(this.name);
            for(CatalogComponent catalogComponent : items){
                if(this.level != null){
                    for(int  i = 0; i < this.level; i++){
                        System.out.print("  ");
                    }
                }
                catalogComponent.print();
            }
        }
    }
    ---
    public class Course extends CatalogComponent {
        private String name;
        private double price;
    
        public Course(String name, double price) {
            this.name = name;
            this.price = price;
        }
    
        @Override
        public String getName(CatalogComponent catalogComponent) {
            return this.name;
        }
    
        @Override
        public double getPrice(CatalogComponent catalogComponent) {
            return this.price;
        }
    
        @Override
        public void print() {
            System.out.println("Course Name:"+name+" Price:"+price);
        }
    }
    

    使用

    public class Test {
        public static void main(String[] args) {
            CatalogComponent linuxCourse = new Course("Linux课程",11);
            CatalogComponent windowsCourse = new Course("Windows课程",11);
    
            CatalogComponent javaCourseCatalog = new CourseCatalog("Java课程目录",2);
    
            CatalogComponent mmallCourse1 = new Course("Java电商一期",55);
            CatalogComponent mmallCourse2 = new Course("Java电商二期",66);
            CatalogComponent designPattern = new Course("Java设计模式",77);
    
            javaCourseCatalog.add(mmallCourse1);
            javaCourseCatalog.add(mmallCourse2);
            javaCourseCatalog.add(designPattern);
    
            CatalogComponent imoocMainCourseCatalog = new CourseCatalog("慕课网课程主目录",1);
            imoocMainCourseCatalog.add(linuxCourse);
            imoocMainCourseCatalog.add(windowsCourse);
            imoocMainCourseCatalog.add(javaCourseCatalog);
    
            imoocMainCourseCatalog.print();
        }
    }
    

    技巧

    • 一个类即继承也有这个类的实例,很有可能是组合模式

    相关文章

      网友评论

          本文标题:设计模式-组合(Composite)模式

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