摘要:
解释器模式:为语言创建解释器,提供评估语言的语法或表达式的方法。 例子: 测试结果: 在JAVA中,使用解释器模式的地方很少,expression4j框架是基于Java的开源框架,它用于对数学表达式进行操作,是一个数学公式解析器。它是应用解释器模式的最佳例子,但目前这个框架仍在完善的过程中。 阅读全文
摘要:
备忘录模式:保存一个对象的某个状态,以便在适当的时候恢复对象。 例子: 测试结果: 我们在不破坏封装的前提下,捕获了Adventor内部的状态state,并把这个状态保存在Memento中,通过一个MementoManager来管理Memento。在Adventor类中的saveStateToMem 阅读全文
摘要:
访问者模式:使用一个访问者类,改变元素的行为。通过这种方式,随着访问者的改变,被访问者的行为可以被改变。 类图: 实现Master接口的具体类是行为需要被改变的对象。 实现Visitor接口的具体类是访问者,访问者不同,实现Master接口的具体类的行为不同。 测试结果: 阅读全文
摘要:
空对象模式:用一个空对象来取代null实例的检查,空对象实现一个不做任何动作的关系。(消除如if(Object == null) 这样的检查null实例代码) 例子: 如果要求的对象不存在,不是返回null,而是返回空对象,这样代码会比使用条件判断更加"优雅"。 阅读全文
摘要:
中介者模式:集中相关对象之间复杂的沟通和控制方式。 模式结构图: 例子: 在这里ChatRoom是一个中介者,有多个User会使用中介者,形成一个用户间的聊天室,如果以后添加一个管理员与用户沟通,就不需要修改User代码了(当然中介者的代码需要修改,因为要添加处理管理员与用户之间交互的功能),只要加 阅读全文
摘要:
蝇量模式:让某个类的一个实例能用来提供许多“虚拟实例”。 在有大量对象时,有可能造成内存溢出,把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重复创建。(JAVA中的String,如果没有则创建一个字符串保存在字符串常量池里,否则直接返回) 类图: 某次测试结果: C 阅读全文
摘要:
责任链模式:可以为某个请求创建一个对象链。每个对象依序检查此请求,并对其处理,或者把它传给链中的下一个对象。 责任链上的对象负责处理请求,客户只需要将请求发送到责任链上即可,无需关心处理的细节和请求的传递,所以请求的发送者和接收者解耦了。 类图: 具体例子: 一个Logger日志抽象类,三个具体日志 阅读全文
摘要:
AbstractStringBuilder是一个抽象类,是StringBuilder和StringBuffer的父类,分析它的源码对StringBuilder和StringBuffer代码的理解有很大的帮助。 先来看看该类的声明: 该类实现Appendable和CharSequence接口。 成员变 阅读全文
摘要:
模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法的结构下,重新定义算法中的某些步骤。 这个模式是用来创建一个算法模板。模板就是一个方法。更具体地说,这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这可以确保算法的结构 阅读全文
摘要:
策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 下面举个例子: 有两个具体策略,分别执行两个整型加法和减法。 如此一来,就能在运行时改变选择的策略,具体策略与客户解耦了,就算具体策略的细节被改变,客户也不需要知道。 阅读全文