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

    不和别人一样,不复制只真正理解
  • 相关阅读:
    111.浮动初识 Walker
    105.灰度和对比度 Walker
    102.表格属性 Walker
    POJ 1321 棋盘问题
    HDU 1106 排序 题解
    HDU 1240 Asteroids! 解题报告
    HDU 1372 Knight Moves
    HDU 1253 胜利大逃亡
    HDU 1231:最大连续子序列 解题报告
    POJ 2251 Dungeon Master
  • 原文地址:https://www.cnblogs.com/Vinlen/p/12792075.html
Copyright © 2011-2022 走看看