• 设计模式-组合模式


    组合模式(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();
    
    
    
        }
    }
  • 相关阅读:
    C#与数据库访问技术总结(十一)之数据阅读器(DataReader)1
    C#与数据库访问技术总结(十)之添加&删除
    C#与数据库访问技术总结(九)之实例
    C#与数据库访问技术总结(八)之ExecuteNonQuery方法
    C#与数据库访问技术总结(六)之Command对象创建SQl语句代码示例
    C#与数据库访问技术总结(七)综合示例
    C#与数据库访问技术总结(五)之Command对象的常用方法
    OS——进程简答题(1)
    LAMP/LNMP 一键安装脚本
    运维如何延续自己的职业生涯--萧田国2017年GOPS深圳站演讲内容
  • 原文地址:https://www.cnblogs.com/woodpecker-z/p/14654244.html
Copyright © 2020-2023  润新知