0%

Adapter


栗子

life

  • 中美插座标准不同,需要适配器去转接
  • 我的小米8没有耳机插孔,需要转接线

多线程

  • 问题

    • 我有一个Task继承自Callable
    • 我的Thread的构造方法需要一个Runnable
  • 解决方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    import java.util.concurrent.Callable;

    public class LeetCode {
    public static void main(String[] args) {
    Callable<Long> callable = new Task(123450000L);
    Thread thread = new Thread(new RunnableAdapter(callable));
    thread.start();
    }
    }

    class RunnableAdapter implements Runnable {
    private Callable<?> callable;

    RunnableAdapter(Callable<?> callable) {
    this.callable = callable;
    }

    @Override
    public void run() {
    try {
    callable.call();
    } catch (Exception e) {
    throw new RuntimeException(e);
    }
    }

    }

    class Task implements Callable<Long> {
    private long num;

    public Task(long num) {
    this.num = num;
    }

    @Override
    public Long call() throws Exception {
    long sum = 0;
    for (long i = 0; i < num; i++) {
    sum += i;
    }
    System.out.println("result:" + sum);
    return sum;
    }

    }
    • 整一个RunnableAdapter
    • 它的构造方法接受一个Callable
    • 它的run方法内部运行Callable的call方法
Read more »

Proxy


定义

为其他对象提供代理以控制对这个对象的访问

栗子

我的梯子(V2Ray)

  • 当我请求网络时,我的梯子接受我的请求

  • 看看这是不是外国的域名(假如我开启了PAC)

      • 拦截请求,我来帮你做一些事
      • 放行
Read more »

责任链


定义

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

多个处理器按照一定顺序组合排列,依次处理请求

Read more »

REST

特点

输入输出都是JSON的API接口

作用

便于第三方调用

便于使用js进行交互

Read more »

JSON

地位

数据传输的一种格式

特点

UTF-8 Only

语法简单,key只能是字符串

浏览器认识JSON,可以转为js对象

  • 开发web应用的不二之选
Read more »

享元

定义

运用共享技术有效地支持大量细粒度的对象。

  • 谁和谁共享
  • 什么叫细粒度
Read more »

外观(Facade)

定义

为子系统中的一组接口提供一个一致的界面。Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

栗子

栗子

  • 假如我是个java写的对象,我想完成“起床“这件事

    • 上厕所
    • 更衣
    • 洗漱
  • 我需要调用3个接口来完成这件事

  • 我整一个Facade类,在内部定义一个“getUp()”方法,方法内部依次调用这三个接口

  • 有了Facade,我只需要调用Favade提供的getup接口即可

Read more »

集成MyBatis

ORM

分类

  • Hibernate
  • JPA

功能

  • 简化数据库操作

    • 起初:通过SQL语句增删改查
    • 现在:通过对一个实例增删改查后调用接口

实现

  • 前提:ORM获得了一些信息(注解)

  • 把ResultSet的每一行映射成javaBean

  • 把javaBean映射成SQL语句的参数

    • ORM如何检视javaBean的修改

      • Proxy
Read more »

设计ORM

设计

利用一些Component 像积木一样组合拼凑 成具有新的所需的特性的过程

JDBC

我可以在java里写java代码 但不能写SQL代码

我通过SQL代码才能操纵SQL

JDBC可以让我通过操纵java来操纵SQL

Read more »

反射

Class类

概念

  • Jvm为每一个加载到内存中的类都创建了一个特殊的Class类的实例
  • 相同的类有共同的Class实例

获得

  • 通过class的静态变量class获得
  • 通过实例的getClass方法获得
  • 通过Class的静态方法forName获得

概念

  • 类的Class实例包含的类的所有信息

  • 通过类对应的Class实例获得类和实例的信息即为反射

动态加载

  • 检查是否已经加载,有就直接返回,避免重复加载

  • 当前缓存中确实没有该类,那么遵循父优先加载机制,加载.class文件

  • 上面两步都失败了,调用findClass()方法加载

应用

访问字段

  • 获得特定实例的某个字段的值

    • 获得该实例对应的类对应的Class实例
    • 通过Class实例获得该字段对应的field实例
    • 通过field实例的方法get获得该类的实例的该字段的值
  • 修改特定实例的某个字段的值

    • 获得该字段对应的field实例
    • 通过field实例的set方法修改字段的值

访问方法

  • 获得方法的信息

    • 获得类对应的Class实例
    • 通过Class实例获得该方法对应的Method实例
  • 调用方法

    • 一般

      • 获得类对应的Class实例
      • 通过Class实例获得该方法对应的Method实例
      • 通过Method实例的invoke方法实现调用
    • 静态

      • 和“一般”的区别

        • invoke传入的实例参数为null
    • 构造

创建实例

  • Class.newInstance()可以调用class的public无参构造方法

应用场景

JVM创建实例

通过Class对象判断真正类型

Spring MVC自动组装

思维导图