第29章:模式总结
- 松耦合
内聚性描述的是一个例程内部组成部分之间相互联系的紧密程度。
耦合性描述的是一个例程与其他例程之间联系的紧密程度。
软件开发中,创建的例程应该是:内部完整,也就是高内聚;与其他例程之间的联系则小巧、直接、可见、灵活,这就是松耦合。
- 面向对象
在做面向对象的开发,创建对象的工作不可避免。创建对象时,负责创建的实体通常需要了解要创建的是哪个具体的对象,以及何时创建这个而非那个对象的规则。而我们如果希望遵循开放-封闭原则
、依赖倒转原则
和里氏代换原则
,那使用对象时,就不应该知道所用的是哪一个特选的对象。此时就需要“对象管理者”工厂来负责此事。在对象创建时,都可以通过工厂的手段来避免指明具体对象,减少耦合性。另外,在创建对象时,使用抽象工厂、原型、建造者的设计比使用工厂方法要更灵活,但它们也更加复杂。通常,设计是以使用工厂方法开始,当设计者发现需要更大的灵活性时,设计便会向其他创建型模式演化。
总之,在面向对象开发过程中,为了避免耦合,都多多少少会应用工厂方法来帮助管理创建对象的工作。工厂方法的实现并不能减少工作量,但是它能够在必须处理新情况时,避免使已经很复杂的代码更加复杂。
面向对象设计模式最本质的体现是抽象的思想,类是对对象的抽象,抽象类是对类的抽象,接口是对行为的抽象。
简单工厂模式在扩展时要更改工厂类,即对修改开放,不符合开放封闭原则,慎用。
创建型模式
抽象工厂、建造者、工厂方法、原型、单例
创建型模式隐藏了类的实例是如何被创建和放在一起,整个系统关于这些对象所知道的是由抽象类所定义的接口。这样,创建型模式在创建了什么、谁创建它、它是怎么被创建的,以及何时创建这些方面提供了很大的灵活性。当一个系统应该独立于它的产品创建、构成和表示时,应该考虑用创建性模式。
创建型模式抽象了实例化的过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。创建型模式都会将关于该系统使用哪些具体的类的信息封装起来。允许客户用结构和功能差别很大的“产品”对象配置一个系统。配置可以是静态的,即在编译时指定,也可以是动态的,即在运行时再指定。
通常设计应该是从是工厂方法开始,当设计者发现需要更大的灵活性时,设计便会向其他创建型模式演化。当设计者在设计标准之间进行权衡的时候,了解多个创建型模式可以给设计者更多的选择余地。
从new
的角度讲,工厂方法是最好的设计,它是把工厂职责都分了类,其它几种模式是它的变体。
- 抽象工厂:提供一个创建一系列或相关依赖对象的接口,而无需指定它们具体的类。
- 建造者:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者将一个复杂对象的构建与它的表示分离,用同样的构建过程创建不同的产品给客户。
- 工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂模式使一个类的实例化延迟到其子类。
- 原型:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
建立相应数目的原型并克隆它们通常比每次用合适的状态手工实例化该类更方便一些。
<