• 《设计模式四》观察、组合、享元模式


    1.8 观察者模式-Observer(重要)

    定义观察者接口,可以有多个观察者实现该接口。观察者经常和责任链一起使用,观察者可以当做责任链的一环。

    • 一般事件都是使用的观察者模式,比如键盘事件,鼠标事件等
    • 事件源对象,观察者

    1.8.1 Spring的AOP

    • Spring的Aop就可以当成一个观察者模式的实现,一直在观察这个切面

    1.8.2 键盘监听器

    • 很多事件也是使用的观察者模式,例如键盘监听器,监听键盘事件
    • 总结:Observer 或 Listenner 或 Hook 或 Callback这种实质上都是属于观察者模式

    1.9 组合模式 - Composite

    • 常用作组织结构,组织树,树状结构
    • 比如根目录下有几个一级子目录,子目录下又有子目录,做的事情不同

    1.10 享元模式-Flyweight

    重复利用对象,常用在输入工具,例如word中,比如你键盘敲击一个字母A。那么如果没有享元会怎么样呢,每敲击一次,就会有一个A对象产生。享元模式事先把A~Z都存下来,放到一个池子中。当做共享的元数据

    1.10.1 连接池,线程池:Pool

    连接池,线程池,都是用的享元模式

    1.10.2 Java中的String

    Java中的字符串,都放在字符串常量池里面

    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";
        String s3 = new String("abc");
        String s4 = new String("abc");
        
        // true
        System.out.println(s1 == s2);
        // false
        System.out.println(s1 == s3);
        // false
        System.out.println(s3 == s4);
        // true
        System.out.println(s3.intern == s1);
        // true
        System.out.println(s.intern == s4.intern);
    }
    

    解释:
    s1 == s2是因为字符串常量池已经有"abc",用的是同一个
    s3 == s4是因为new操作重新分配了内存,内存地址不同,所以false
    s3.intern == s1是因为s3.intern表示的是s3对应的常量池引用,因为虽然s3开辟了内存,但是指向的常量也会从常量池里面拿,不会新创建"abc""

    1.10.3 结合组合模式的享元模式

    享元的元对象,可以组合成另外的元对象,所以可以和组合结合起来

  • 相关阅读:
    fatal error C1902: 程序数据库管理器不匹配;请检查安装 (zz)
    c++ std string reserve 测试
    2018年长沙理工大学第十三届程序设计竞赛
    2018年东北农业大学春季校赛
    从本质看海明码——海明码的由来
    CodeForces475
    一维背包问题
    2018年长沙理工大学第十三届程序设计竞赛 箱庭的股市
    高精度加法模板
    for,while,do while
  • 原文地址:https://www.cnblogs.com/darope/p/12731911.html
Copyright © 2020-2023  润新知