zoukankan      html  css  js  c++  java
  • 设计模式(第九式:组合模式)

    概念:
        组合模式:将对象组合成属性结构,以表示“部分——整体“的层次结构,是的用户对单个对象和组合对象的使用具有一致性。

    实现:
        定义一个书架

        public interface Bookshelf {
            /**
            * 书架的一个基本操作,其实也可以不要,这里是为了区分当前累做什么的
            */
            void operation();
    
        }

        定义一个存放书的空间

        public class Bookroom implements Bookshelf {
    
            List<Bookshelf> list = new ArrayList<>();
    
            public void addBookshelf(Bookshelf bookshelf){
                list.add(bookshelf);
            }
    
            public void remove(Bookshelf bookshelf){
                list.remove(bookshelf);
            }
    
            public List<Bookshelf> getChild(){
                return list;
            }
    
            @Override
            public void operation() {
                System.out.println("这是用来存放书的");
            }
        }

        要被存放的书

        public class Book implements Bookshelf{
    
            @Override
            public void operation() {
                System.out.println("你要读这本书么?");
            }
        }

    分析:
        1.其实这个倒不是很难,但是理解起来不是那么直观,可能因为类名会影响思维逻辑,但不影响用文字描述,方便理解:
            a.两个类实现一个共同的接口,目的是为了方便对象造型时统一。
            b.这个接口不一定非需要一个方法,可以没有或者多个
            c.其中一个类中存放了一个接口类型的list,这样就能做出层级感,另一个接口中没有存list,所以就只能是末节点。
        2.其实相当于搞了一个层级结构出来,这样做不利于我们扩展行为,而且对节点的类型也有限制,但却不借助其他规定的情况下解决了层级存储的结构模式。
        3.适用场景:
            a.在做文件系统的时候应该可能会用到
            b.一般如果单纯的传递数据,基本都适用json的格式,所以这个在开发过程中用到的不是很多
            ...

    经典框架中使用的:
        觉得spring中应该是有用到的,具体什么地方没注意过

  • 相关阅读:
    css div position to parent
    linux 解压缩/压缩命令大全
    button with backgroundimage programmaticaly
    使用数组初始化vector 对象
    AudioServicesPlaySystemSound
    objective-c 中随机数的用法 (3种:arc4random() 、random()、CCRANDOM_0_1() )
    指针和多维数组(例子需要好好消化理解)
    很经典的赋值算法之一:动态为数组有序赋值
    string 类的c_str 的成员函数
    自由存储区的空间 C++和C
  • 原文地址:https://www.cnblogs.com/ben-mario/p/10717825.html
Copyright © 2011-2022 走看看