`
zhangwei_david
  • 浏览: 477067 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
     观察者模式(Observer Pattern)的意图是在多个对象之间定义一对多的依赖关系,当一个对象的状态改变时,会通知依赖于他的对象,并根据状态做出想用的反应。       观察者模式(Observer Pattern)涉及的角色有: 抽象主题(Abstract Subject)角色:抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如ArrayList对象)里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象,抽象主题角色又叫做抽象被观察者(Observable)角色 具体主题(ConcreteSubject)角色:将有关状态存入具 ...
       命令模式(Command Pattern)是对象的行为模式,其意图是将请求封装在对象的内部。  命令模式涉及的角色有: 客户端(Client )角色:负责创建一个具体的命令,并指定命令的接受者 命令(Command) 角色: 定义一个命令公共的操作接口 具体命令(Concrete Command)角色:定义一个命令的接收者和行为之间的耦合。实现命令接口的公共接口,调用接收者的相应操作。 请求者(Invoker)角色:负责调用命令对象执行请求。 接收者(Receiver)角色:负责具体实施和执行一个请求    示例:          在生活只能电视机就是一个 ...
在 项目中使用#springMessage进行错误码解析为错误消息,可是在特定的场景下出现了       $springMacroRequestContext.getMessage($code)   #springMessage      是在org/springframework/web/servlet/view/velocity/spring.vm 文件中定义了一个宏。其内容是:   #** * springMessage * * Macro to translate a message code into a message. *# #macro( sp ...
    Timer类负责管理延迟任务以及周期任务。然而,Timer存在一些固有的缺陷。    Timer 在执行定时任务时只会创建一个后台线程。如果某个线程执行的时间过长,那么将破会其他定时任务的精确性。   Timer的另一个问题是,如果TimerTask抛出一个非检查异常,由于Timer不捕获异常导致终止定时任务线程。在这样情况下,Timer无法恢复线程的执行,而是错误地认为整个Timer都被取消了。因此,已经被调度但尚未执行的TimerTask将不会再被执行,新的任务也不能被调度。    Timer支持基于绝对时间而不是相对时间的调度机制,因此任务的执行对系统时间的变化很敏感。 Sc ...
       策略模式(Strategy Pattern)属于对象行为模式。其作用是针对一组算法,将每个算法封装到具有共同接口的独立类中,从而使它们可以相互替换。         策略模式的意图是将可以互换的方法封装在各自的对立类中并且让每个方法都实现一个共同的接口。        策略模式(Strategy pattern)中涉及到三个角色: 环境(Context)角色:持有一个Strategy类的引用的类 抽象策略(Abstract Strategy)角色:这是一个抽象角色,通常由一个接口或者抽象类实现,此角色定义了所有具体策略对象所需要的接口。 具体策略(Concrete ...
       发布(Publish)一个对象是指使对象能够在当前作用域之外的代码中被使用。例如将指向该对象的引用保存到其他代码可以访问到的地方 ,或者在一个非私有的方法中返回一个对象的引用或者将该引用传递到其他类的方法中。当发布一个对象时,在该对象的非私有域中的引用同样被发布出去,一般来说如果一个已经发布的对象能够通过非私有的变量和方法调用到其他的对象那么这个对象也被发布。        逸出(Escape)是指 一个比应该被发布的对象被发布出去。   在 《Java Concurrency in Practice》中关于隐式使用This 引用逸出的示例,比较难以理解如何逸出。This ...
      所谓代理,就是一个 人或者一个机构代表另一个人或者机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。      代理模式的角色: 抽象主题角色:声明了真实主题和代理主题角色的共同接口,这样在任何使用真实主题的地方都可以使用代理主题。 代理主题角色:代理主题角色持有真实主题角色的引用,从而可以在任何使用操作真实主题的角色;代理主题角色提供了和真实主题角色相同的接口,以便在任何时候可以替换真实主题角色。 真实主题角色:定义了代理角色所代表的真实角色。  代理模式可以分为 静态代理和动态代理(Spri ...

线程安全

        线程安全的定义:当多个线程访问某个类时,不管运行环境采用何种调度方式或者这些线程如何交替执行,并且在主调用代码中不需要额外的同步和协调,这个类都能表现出正确的行为,那么这个类就是线程安全的。        线程安全性可能是非常复杂的,在没有充足同步的情况下,多个线程中的操作执行顺序是不可预测的,甚至会产生非常奇怪的结果。         如果当多个线程访问一个可变的共享变量时没有使用合适的同步,那么线程就会出现错误。有三种方式可以修复这个问题: 不在线程间共享变量 将可变的变量改为不可变的变量 在访问时使用同步。 有这样一个需求,需要按照序列顺序产生一个序列( ...
    装饰器模式(Decorator Pattern)又名包装模式(Wrapper Pattern)。装饰模式以对客户透明的方式扩展对象的功能,是继承关系的一种替代。换言之,客户端不会觉得对象在装饰前和装饰后有什么不同。      装饰器模式(Decorator Pattern)中的各个角色: 抽象构件(Componet)角色:给出一个抽象接口,规范准备接收附加责任的对象。 具体构件(Concrete Componet)角色:定义一个将要接收附加责任的类 装饰(Decorator)角色:持有一个构件(Componet)对象的实例,并定义一个与构件接口一致的接口 具体装饰(Con ...
  在 Java 中线程的状态可以分为:新建(New),运行状态(Runnable)、阻塞状态(Blocked)、等待状态(Waiting)、结束状态(Terminated)。运行状态可以转为 阻塞状态或等待状态。    在接收完基本概念后,我们看看显示锁(Lock)和内部锁(synchronized)有什么不同。 Lock 支持更细粒度的同步控制 Lock是无阻塞锁,synchronized 是阻塞锁。当线程A持有锁S,如果线程B也期望获取锁S,如果是显示锁则线程B进入等待状态,如果是内部锁则线程B进入阻塞状态 Lock可以实现公平锁(默认是非公平锁,即使对公平锁而言,可轮询的t ...
    首先接受 java 的内存模型,在java 中每个线程都有自己的工作内存,如寄存器,高速缓存等,线程在写入的时候首先写入的是自己的工作内存中,然后在刷到主内存中,读取也是先从主内存加载到工作内存中,然后线程是从工作内存中获取。     volatile 只能保证每次读写数据的时候都是对主内存进行操作,但是并不能保证该资源的同步。     /** * * @author zhangwei_david * @version $Id: UnsafeThread.java, v 0.1 2014年10月22日 下午10:18:11 zhangwei_david Exp $ ...
    模板方法模式(Template Method Pattern)的定义是:定义一个操作中的算法骨架,将一些易变的步骤延迟到子类中,使得子类在不改变算法结构即可重定义该算法的默写特定步骤。      也就是说将一下不变的方法抽象到父类中,将一些业务相关的方法延迟到子类中。 有一个业务需要检查参数是否合法,结果是否符合预期,以及一些具体业务相关的检查。 /** * * @author zhangwei_david * @version $Id: AbstractPopulator.java, v 0.1 2014年10月21日 下午10:37:02 zhangwei_da ...

泛型通配符的使用

    博客分类:
  • Java
   Java 泛型支持通配符,类型有以下3类: 无限定通配符   形式<?> 上边界限定通配符 形式< ? extends SuperClass> 下边界限定通配符    形式< ? super SubClass> 那么该如何 确定该使用何种通配符呢? 如果是“读”操作 则需要限定 上边界,如果是写操作则需要限定下边界;而无限定通配符表示只读,不能进行增加、修改。   import java.util.List; /** * * @author zhangwei_david * @version $Id: Wildca ...
    List 接口提供了subList方法,其作用是返回一个原列表的一个视图。对子列表的修改可以直接反馈到原列表中。     /** *subList 只是原列表的一个视图 * @author zhangwei_david * @version $Id: SubListDemo.java, v 0.1 2014年10月18日 下午8:50:33 zhangwei_david Exp $ */ public class SubListDemo { /** * * @param args */ public ...
      在CXF WebService (一) 中可以发现发布一个WS 服务还是很简单的,但是我们在Spring 中发布一个WS还有更简单的方法。       <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi=" ...
Global site tag (gtag.js) - Google Analytics