0%

原型


概念

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

创建新对象的时候,根据现有的一个对象创建

栗子

Arrays.copyof

Object.clone

Maven


java项目所需

classpath

  • 概念

    • 一组路径的集合
  • 用途

    • 告知jvm哪里可以找到指定的class文件
  • 默认值

    • 当前目录

项目的目录结构

Read more »

单例


定义

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

特点

在某个进程中,某个类有且只有一个实例

实现

方式一

  • private的构造方法确保外部无法实例化
  • private的static变量持有唯一的实例
  • public的static方法返回此实例确保外部能获得此唯一实例

方式二

  • enum

    • 枚举类的每个枚举都是单例

方式三

  • 自觉
Read more »

创建型模式


Factory Method

Abstract Factory

Builder

Prototype

Singleton

多线程


condition

地位

  • reentrantlock的partner
  • 类似于synchronized和(wait、notify)的关系
  • 一个lock对应一个condition

new

  • 必须使用对应lock的newCondition方法

方法

  • await()

    • 可以设置等待时间、超过后自己醒来
  • signal()

  • signalAll()

Read more »

装饰器


Filter模式就是Decorator模式

思想

把需要新添加的内容用Decorator的方式层层加之于上,把新功能组合于原有基础之上

优势

可以将核心功能和附加功能分开

  • 增加核心功能就增加子类
  • 增加附加功能就增加Decorator的子类
  • 可以在运行期间动态的给核心功能添加附加功能
Read more »

组合


定义

将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。

实现

统一单个节点以及“容器”节点的接口

容器节点可以添加任意个单个节点,形成层级结构

Read more »

桥接


定义

将抽象部分与它的实现部分分离,使它们都可以独立地变化

继承存在的问题

按特点取名继承

  • 子类数量爆炸

解决方案

在父类里设置一个可以插入的槽位

可以将独立的特点划分成不同的Component

这些Component可以被插入到槽位里

Read more »

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 »