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

    树枝和树干组成了树,就用树枝和树干来讲解一下组合模式。

    一个组合模式有3种角色,抽象构件,类似于树干,定义了基本方法;树枝构件,用于管理树叶;树叶构件,用于具体实现。

    先来看一个例子

    学生:

    interface Student {
        void add(Student s);
    
        void remove(Student s);
    
        Student getStudent(int x);
    
        void study();
    
    }

    班级:

    public class GradeOne implements Student {
        private String name;
        @Override
        public void add(Student s) {
    
        }
    
        @Override
        public void remove(Student s) {
    
        }
    
        @Override
        public Student getStudent(int x) {
            return null;
        }
    
        @Override
        public void study() {
            System.out.println(this.name+"在学习");
        }
    
        public GradeOne(String name) {
            this.name = name;
        }
    }

    一年级学生

    public class GradeOne implements Student {
        private String name;
        @Override
        public void add(Student s) {
    
        }
    
        @Override
        public void remove(Student s) {
    
        }
    
        @Override
        public Student getStudent(int x) {
            return null;
        }
    
        @Override
        public void study() {
            System.out.println(this.name+"在学习");
        }
    
        public GradeOne(String name) {
            this.name = name;
        }
    }

    测试类

    public class Client {
        public static void main(String[] args) {
            Monitor m1 = new Monitor();
            Monitor m2 = new Monitor();
            m1.add(new GradeOne("小明"));
            m1.add(new GradeOne("小红"));
            m1.add(new GradeOne("小黑"));
            m1.study();
        }
    }

    在这种模式下,多个学生组成了一个班级,班级有对学生的控制权,在该设计模式中,抽象构件声明了所有子类的方法,所以对于客户端来说都是同一个超类,无需区分对象,对客户端来说是同名的,这种叫做透明的组合模式。但是因为学生类没有具体的实现接口中的所有方法,需要空实现或者抛异常,可能会带来安全问题。

    还有一种方法是安全的组合模式,接口只定义一个study方法,树叶只需要实现study方法,树枝添加对树叶的管理方法,这种组合方式就是安全的。

    应用场景:需要隐藏组合对象和单个对象不同的时候可以使用此设计模式,对外只提供一个唯一的接口(study)访问所有数据结构,

    不和别人一样,不复制只真正理解
  • 相关阅读:
    Kafka.net使用编程入门(三)
    Kafka.net使用编程入门(一)
    在linux机器上面安装anaconda和相关软件
    textrank的方法,大概懂了
    中文分词库及NLP介绍,jieba,gensim的一些介绍
    排序相关指标
    阿里NLP总监分享-NLP技术的应用与思考
    我一直跑的分类LSTM模型原来是这一个,新闻分类网络
    Vue.js@2.6.10更新内置错误处机制,Fundebug同步支持相应错误监控
    掌握 Async/Await
  • 原文地址:https://www.cnblogs.com/Vinlen/p/12792075.html
Copyright © 2011-2022 走看看