0%

给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

优点:

  • 将每个语法规则表示成一个类,方便实现语言。
  • 因为语法由许多类表示,可以轻易改变或拓展此语言。
  • 通过在类结构中加入新的方法,可以在解释的同时增加新的行为,例如复杂的程序验证等。

缺点:

  • 当语法规则的数目太大时,这个模式可能会变得非常复杂。
阅读全文 »

将命令封装成对象,具有以下作用:

  • 使用不同的命令来参数化客户需求
  • 将命令放入队列中进行排队
  • 将命令的操作记录到日志中
  • 支持可撤销的操作

命令模式实现了行为请求者和行为实现者的解耦。

应用场景:

  • 餐厅:服务员(行为请求者)、厨师(行为实现者)
  • 遥控器(行为请求者)、被遥控机器(行为实现者)
  • 开关(行为请求者)、电灯(行为实现者)
阅读全文 »

使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链发送该请求,直到有一个对象处理它为止。

责任链模式的好处是:接收者和发送者都没有对方的明确信息,且链中的对象自己也不知道链的结构。结果是它们仅需保持一个指向其后继者的引用,而不需保持它所有的候选接收者的引用。

阅读全文 »

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

原型模式就是从一个对象再创建另一个可定制的对象,而不需要知道任何创建的细节。

阅读全文 »

将一个复杂对象的构建与它的表示分离,使得同样的构造过程可以创建不同的表示。

建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。建造者模式的好处是使得构造复杂对象的建造代码和表示代码分离,隐藏了产品是如何组装的,若需要改变一个产品的内部表示,只需要再定义一个具体的建造者。

阅读全文 »

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

工厂方法只是用于创建一个对象,而抽象工厂创建的是对象家族,也就是很多对象,而且这些对象是相关的,必须一起创建出来。

阅读全文 »

定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。

在简单工厂中,创建对象的是简单工厂类;而在工厂方法中,创建对象的是继承了父类工厂的子类。

阅读全文 »

在创建对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。

简单工厂把实例化操作单独放到一个类中,这个类就是简单工厂类,让简单工厂类来决定应该实例化哪个具体子类。这样做的好处是,能够把客户端和具体子类的实现解耦,客户端不再需要知道有哪些子类以及应当实例化哪个子类。

阅读全文 »