类加载 基本概念 在Java代码中,类型的加载、连接与初始化过程都是在程序运行期间完成的。 提供了更大的灵活性,增加了更多的可能性。 类加载器深入刨析 Java虚拟机与程序的生命周期 在如下几种情况,Java虚拟机将结束生命周期 ...
Read More类加载 基本概念 在Java代码中,类型的加载、连接与初始化过程都是在程序运行期间完成的。 提供了更大的灵活性,增加了更多的可能性。 类加载器深入刨析 Java虚拟机与程序的生命周期 在如下几种情况,Java虚拟机将结束生命周期 ...
Read More定义 定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。 使用场景 关联行为场景,需要注意的是,关联行为是可拆分的,而不是”组合”关系。 时间多级触发场景。 跨系统的消息交换场景,如消息队列,事件总线的处理机制。 实现示例 Sub...
Read More定义 将一个请求封装成一个对象,从而让用户使用不同的请求把客户端参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。 使用场景 需要抽象出待执行的动作,然后以参数的形式提供出来——类似于过程设计中的回调机制,而命令模式正是回调机制的一个面向对象的替代品。 在不同的时刻指定、排列和执行请求。一个命令对象可以有于初始请求无关的生存期。 需要支持取消操作。 支持修改日志功能,这样当系统崩溃时,这些修改可以被重做一遍。 需要支...
Read More定义 使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。 使用场景 多个对象可以处理同一请求,但具体由那个对象处理则再运行时动态决定。 在请求处理者不明确的情况下向多个对象中的一个提交一个请求。 需要动态指定一组对象处理请求。 <a href="#实现示例" class="headerlink" title="实现示例"...
Read More定义 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是其改变了类。 使用场景 一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为。 代码中包含大量与对象状态有关的条件语句,例如一个操作中含有庞大的多分支语句(if-else或switch-case),且这些分支依赖于该对象的状态。 实现示例</h2...
Read More定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 使用场景 针对同一类型问题的多种处理方式,仅仅是具体行为有差别时。 需要安全地封装多种同一类型的操作时。 出现同一抽象类有多个子类,而又需要使用if-else或者switch-case来选择具体子类时。 <a href="#简单实现" class="headerlink" title...
Read More定义 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 使用场景 类初始化需要消耗非常多的资源,这个资源包括数据、硬件资源等,通过原型拷贝避免这些消耗。 通过new产生一个对象需要非常繁琐的数据准备或访问权限,这时可以使用原型模式。 一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用,即保护性拷贝。 注意: 通过实现Cloneable接口的原型...
Read More定义 确保某一个类只有一个实例,二期自行实例化并向整个系统提供这个实例。 实现单例模式的几个关键点 构造函数不对外开放,一般为Private。 通过一个静态方法或者枚举返回单例类对象。 确保单例类的对象有且只有一个,尤其是在多线程环境下。 确保单例类对象在反序列化是不会重新构建对象。 <a href="#饿汉式" class="headerlink...
Read More单一职责原则SRP 单一职责原则的定义:就一个类而言,应该仅有一个引起它变化的原因。 开闭原则OCP 开闭原则的定义是:软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是对于修改是封闭的。 实力:对于CustomImageLoader,存储方式是变化的(缓存、本地存储、缓存+本地),提供一个ImageCache接口,通过扩展ImageCache注入不同的缓存实现。 <h2 id="里氏替代原...
Read More