设计模式题目

  1. 传输对象模式

当我们要一次从客户端到服务器传递具有多个属性的数据时,使用此模式

传输对象模式(Transfer Object Pattern)用于从客户端向服务器一次性传递带有多个属性的数据。
服务器端的业务类通常从数据库读取数据,然后填充 POJO,并把它发送到客户端或按值传递它。
对于客户端,传输对象是只读的。客户端可以创建自己的传输对象,并把它传递给服务器,以便一次性更新数据库中的数值。以下是这种设计模式的实体。

业务对象(Business Object) - 为传输对象填充数据的业务服务。
传输对象(Transfer Object) - 简单的 POJO,只有设置/获取属性的方法。
客户端(Client) - 客户端可以发送请求或者发送传输对象到业务对象。

  1. 以下哪种模式使用简单对象并采用逐步方法来构建复杂对象? 建造者模式
    A、 桥接模式
    B、 建造者模式
    C、 过滤器模式
    D、 适配器模式

Adapter class/object 适配器模式

可以进行接口转化

  • 意图:
    将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
  • 适用性:
    你想使用一个已经存在的类,而它的接口不符合你的需求。
    你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
    (仅适用于对象Adapter )你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。

类适配器和对象适配器

这里列举一个c++ STL中的适配器例子,这是只是简单模型,想要深入请看STL源码剖析
这里target:Sequence
adaptee是:deque
而被实现的适配器是queue和stack

解释器模式(Interpreter Pattern)

解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。

(1) 可以将一个需要解释执行的语言中的句子表示为一个抽象语法树。

(2) 一些重复出现的问题可以用一种简单的语言来进行表达。

(3) 一个语言的文法较为简单。

(4) 执行效率不是关键问题。(注:高效的解释器通常不是通过直接解释抽象语法树来实现的,而是需要将它们转换成其他形式,使用解释器模式的执行效率并不高。

优点:

(1) 易于改变和扩展文法。由于在解释器模式中使用类来表示语言的文法规则,因此可以通过继承等机制来改变或扩展文法。

(2) 每一条文法规则都可以表示为一个类,因此可以方便地实现一个简单的语言。

(3) 实现文法较为容易。在抽象语法树中每一个表达式节点类的实现方式都是相似的,这些类的代码编写都不会特别复杂,还可以通过一些工具自动生成节点类代码。

(4) 增加新的解释表达式较为方便。如果用户需要增加新的解释表达式只需要对应增加一个新的终结符表达式或非终结符表达式类,原有表达式类代码无须修改,符合“开闭原则”。

缺点:

(1) 对于复杂文法难以维护。在解释器模式中,每一条规则至少需要定义一个类,因此如果一个语言包含太多文法规则,类的个数将会急剧增加,导致系统难以管理和维护,此时可以考虑使用语法分析程序等方式来取代解释器模式。

(2) 执行效率较低。由于在解释器模式中使用了大量的循环和递归调用,因此在解释较为复杂的句子时其速度很慢,而且代码的调试过程也比较麻烦

实现: 尽量不要在重要模块中使用解释器模式,因为维护困难。在项目中,可以使用脚本语言来代替解释器模式。实现方式基本同Composite模式。
重构成本:高。

参考文献:

https://blog.csdn.net/chenxun_2010/article/details/48383571
https://blog.csdn.net/llg070401046/article/details/73323934