文章标签 » 设计模式

[译文]设计模式04 – 对象池模式(附代码实例)

原文网址:Object Pool Pattern

意图

对象池对性能有显著的提升。在以下场景中最有效:实例化过程复杂的对象;实例化频率高的对象;同一时刻用到的实例数量较少。

问题

对象池(也叫资源池)是用来管理对象缓存的。一个使用了对象池的客户端可以请求对象池中已经存在的实例,而不用自己创建。一般来说,这个对象池是可以自动增长的,当它是空的时候可以自己创建对象。或者我们可以限定对象池的大小。

将所有可重复使用的、当前未使用的对象放在同一个对象池中以保证其连贯性是有必要的。为了达到这个目的,对象池应该是单例的。

讨论

对象池允许其他程序从中获取对象,当用完后在放回池中,以便下次再用。

但是我们不会一直等着某个对象被释放,所以在必要的时候对象池可以创建新的对象,但一定要有定期清理未使用的对象的机制。

Continue Reading »

[译文]设计模式03 – 工厂方法模式(附代码实例)

原文网址:Factory Method Design Pattern

意图

  • 定义一个用来创建对象的接口,由其子类(实现类)决定哪个类应该被初始化。工厂方法把类的初始化过程延迟到子类里
  • 定义一个虚拟的构造器
  • new 是危险的操作

问题

一个框架需要对其架构模型有一套标准化的操作规范,但对一个单独的应用来说,可以定义不同的作用域对象及其初始化过程。

讨论

工厂方法模式是为了创建对象,就像模板方法模式是为了实现一种算法。接口定义了标准的创建对象的方法(用纯虚拟的标识——如abstract——来修饰创建步骤),然后委托子类去完成创建的具体步骤,并将子类提供给客户端调用。

工厂方法模式使得设计具有更多的可定制化空间,而只是多了一点点复杂性。其他设计模式需要新的类,而它只需要新的操作(方法)。

大家经常使用工厂方法模式作为创建对象的标准方式,但以下情况就没有必要用了:初始化过程不会再改变的类,或者初始化过程被放在很容易被子类覆盖的方法里(如构造函数)。

工厂模式方法和抽象工厂很相似,只是少了那一组相关或类似对象。

工厂模式通常是在基础框架中定义,然后由使用者去实现。

Continue Reading »

[译文]设计模式02 – 构造器模式(附代码实例)

原文网址:Builder Design Pattern

意图

  • 将一个复杂对象的创建和它可能的表现形式分开,以便于同一个创建过程可以创建不同的表现形式
  • 分析一套繁杂的表现形式(最终产品),完成其中一个

问题

一个应用需要创建一个有很多元素组成的复杂的集合体。该集合体的具体内容存储在辅助存储器内(如文件),但其中某一种展现形式需要在主存储器(内存)中构建。

讨论

将解析(读取和分析)已存储的数据(如RTF文件)的算法与构建并展示众多表现形式(如ASCII,TeX,文本组件)之一的算法分开。重点在于创建一个复杂的集合体。

“主管”在解析底层数据时调用“构建者”。“构建者”每次被调用都构建这个复杂对象的某一部分,并且掌控所有中间状态。构建完成后,客户端可以从“构建者”处获取。

对创建过程有了更好的控制。不像之前的“抽象工厂模式”一步构建(new)对象,“构造器模式”是在“主管”的控制下一步步地完成构建。

Continue Reading »

[译文]设计模式01 – 抽象工厂模式(附代码实例)

原文网址:Abstract Factory Design Pattern

意图

  • 提供一个创建一组相关或相似对象的接口,而不用关心具体的类
  • 一种继承关系,包括了各种可能的”平台”和一组对象的创建
  • new 操作是有害的(言下之意就是少用)

问题

如果一个应用是便捷式的,那么它就要封装对平台的依赖。这里说的“平台”包括视窗系统、操作系统、数据库等等。通常这些封装不会提前设计,所以当要增加新的平台时 if 的条件语句就会像兔子一样在代码里到处乱串。

讨论

采用一种迂回的方式将一组类似或相关的对象的创建与具体的对象类隔离开来。工厂对象负责提供所有这一类对象的创建服务。客户端不用直接创建平台对象,让“工厂”去创建。

这样的机制使得不同“产品”之间的切换变得简单,因为具体的类只在工厂对象类里出现一次——实例化对象的地方。通过在抽象工厂里使用不同的具体实现类的方式,应用程序可以大规模地替换整个产品簇。

由于抽象工厂的方式使用得很普遍,它惯常用单例模式实现。

Continue Reading »

[译文]设计模式

原文网址:sourcemaking.com

 

在软件工程领域,设计模式是一种可用来解决软件设计中常出现的问题的可重复的解决方案。设计模式不是可以直接将其转化为代码的完备设计,它是用来解决不同场景下不同问题的一种描述或模板。

设计模式的用途

有了经过检验的开发范例,设计模式可以加快开发的进度。高效的软件设计应该要考虑那种隐蔽的直到实现时才暴露的问题。使用设计模式可以有效地避免那种可能导致决堤的蚁穴一样的问题,并且对于熟悉设计模式的程序员和架构师来说大大地提高了代码的可读性。

通常,人们知道怎么通过特定的技术或方法去解决特定的问题。但是这类方法很难应用到更宽泛的问题领域。设计模式提供了更通用的解决方案,形成公式化,并且不跟特定的问题捆绑。

另外,设计模式给开发者们提供了一种更好理解和沟通的专业术语。设计模式可以不断地锤炼,变得越来越稳健。

设计模式的分类(译者添加)

可将设计模式划分为三大类:创建类设计模式(Creational Design Patterns)、结构类设计模式(Structural Design Patterns)和行为类设计模式(Behavioral Design Patterns)。
Continue Reading »