zoukankan      html  css  js  c++  java
  • 设计模式-组合模式

    组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
    这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。
    主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
    JAVA应用:
    org.apache.ibatis.scripting.xmltags.MixedSqlNode
    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 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 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 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();
    
    
    
        }
    }
  • 相关阅读:
    POJ3690:Constellations(二维哈希)
    Codeforces Round #547 (Div. 3) 题解
    Educational Codeforces Round 48 (Rated for Div. 2) CD题解
    Educational Codeforces Round 50 (Rated for Div. 2) C. Classy Numbers
    Codeforces Round #508 (Div. 2) E. Maximum Matching(欧拉路径)
    Codeforces Round #546 (Div. 2) 题解
    Codeforces Round #545 (Div. 2) 题解
    Codeforces Round #544 (Div. 3) 题解
    利用最新Apache解析漏洞(CVE-2017-15715)绕过上传黑名单
    xctf一道反序列化题
  • 原文地址:https://www.cnblogs.com/woodpecker-z/p/14654244.html
Copyright © 2011-2022 走看看