设计模式原则

单一职责原则:类的职责要单一,不能将太多的职责放在一个类中。

一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。有且仅有一个原因使类变更。

类的职责要单一,使类高内聚,低耦合。

开闭原则:对扩展开放,对修改关闭。

里氏代换原则:父类出现的地方,子类一定也可以出现。

依赖倒置原则:要针对抽象编程,而非针对具体编程。即:依赖抽象,不依赖具体。

合成/聚合复用原则:系统中应该尽量使用组合和聚合关联关系,尽量少使用甚至不适用继承关系。

迪米特法则:一个软件实体对其它类的引用越少越好,或者说如果两个类彼此之间不直接通信,那么这两个类之间就不应当发生直接相互作用,而是通过引入一个第三者发生间接交互。


桥接模式

桥接模式(Bridge)是一种结构型设计模式。

Bridge模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。

主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。

优点

实现了抽象和实现部分的分离

更好的可扩展性

可动态的切换实现

实现细节对客户端透明,可以对用户隐藏实现细节

缺点

桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程。

桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围有一定的局限性。


访问者模式

访问者模式(Visitor)提供一个作用于某对象结构中的各元素的操作表示,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式。

Vistor: 抽象访问者为对象结构中每一个具体元素类ConcreteElement声明一个访问操作,从这个操作的名称或参数类型可以清楚知道需要访问的具体元素的类型,具体访问者需要实现这些操作方法,定义对这些元素的访问操作。

Concrete Visitor: 具体访问者实现了每个由抽象访问者声明的操作,每一个操作用于访问对象结构中一种类型的元素。

Element: 抽象元素一般是抽象类或者接口,它定义一个accept()方法,该方法通常以一个抽象访问者作为参数。

Concrete Element: 具体元素实现了accept()方法,在accept()方法中调用访问者的访问方法以便完成对一个元素的操作。

Object Structure: 对象结构是一个元素的集合,它用于存放元素对象,并且提供了遍历其内部元素的方法。它可以结合组合模式来实现,也可以是一个简单的集合对象,如一个List对象或一个Set对象。

访问者模式中对象结构存储了不同类型的元素对象,以供不同访问者访问。访问者模式包括两个层次结构,一个是访问者层次结构,提供了抽象访问者和具体访问者,一个是元素层次结构,提供了抽象元素和具体元素。相同的访问者可以以不同的方式访问不同的元素,相同的元素可以接受不同访问者以不同访问方式访问。在访问者模式中,增加新的访问者无须修改原有系统,系统具有较好的可扩展性。

在访问者模式中,抽象访问者定义了访问元素对象的方法,通常为每一种类型的元素对象都提供一个访问方法,而具体访问者可以实现这些访问方法。这些访问方法的命名一般有两种方式:一种是直接在方法名中标明待访问元素对象的具体类型,如visitElementA(ElementA elementA),还有一种是统一取名为visit(),通过参数类型的不同来定义一系列重载的visit()方法。当然,如果所有的访问者对某一类型的元素的访问操作都相同,则可以将操作代码移到抽象访问者类中,其典型代码如下所示:


Reference:

  1. 设计模式原则
  2. 设计模式之桥接模式
  3. 操作复杂对象结构——访问者模式