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)访问所有数据结构,

    不和别人一样,不复制只真正理解
  • 相关阅读:
    Python 安装Twisted 提示python version 2.7 required,which was not found in the registry
    Openfire Strophe开发中文乱码问题
    css div 垂直居中
    How to create custom methods for use in spring security expression language annotations
    How to check “hasRole” in Java Code with Spring Security?
    Android 显示/隐藏 应用图标
    Android 当媒体变更后,通知其他应用重新扫描
    文件上传那些事儿
    专题:点滴Javascript
    主流动画实现方式总结
  • 原文地址:https://www.cnblogs.com/Vinlen/p/12792075.html
Copyright © 2011-2022 走看看