适配器模式
当我们有一个可以立即使用的类时,由于不符合客户端使用的接口时,我们需要创建一个适配器(adpter),以使当前可用的类能够被客户端对象使用。而在适配已有类时,存在两种方法,一种是通过继承的方式来适配,一种是通过引用(组合)的方式来适配,前者叫类适配,而后者加对象适配。
适配器的两种Java实现在这里可以下载。
以下是类适配的UML类图:
以下是对象适配的UML类图:
构建模式
构建模式是创建模式的一种,该模式有点类似与抽象工厂模式,不同的构建对象构建不同的产品,但构建模式与抽象工厂模式不同在于,构建模式是一步步构建出被构建对象的,即产品对象。
以下是构建模式的Java实现(点击这里下载)。
以下是构建模式的UML类图:
合成模式
合成模型(composite)将对象组织在树形结构中,可以用来描述整体与局部的关系,客户端可以将单纯元素和复合元素统一看待。
这里是合成模式Java实现的代码下载(点击下载)
合成模式有两种实现方式,两种实现方式的最重要的区别就在于对非叶子节点的操作是否对客户端透明,对客户端透明,那么客户端就不会感知到叶子节点和非叶子节点的不同,那么需要将对非叶子节点的操作定义到component接口中,但由于这些操作只是针对非叶子节点的,所以对于叶子节点是没有任何意义的,但由于接口已经定义在了component中,所以,所有的叶子节点都将于实现一次对于自己来说没有意义的方法。这即是透明式,以下是类设计图:
另外一种实现方式就是区别对待叶子节点和非叶子节点,在component接口中仅仅定义了对叶子节点和非叶子节点都有意义的操作,而对非叶子节点才有意义的操作,单独定义在非叶子节点上。这样实现的方式的好处是,对客户端式安全的,不会由于在叶子节点对象上调用到不该调用的方法(这里指定义在非叶子节点上的方法),缺点即是,客户端会感知到存在不同的实现节点,即叶子节点和非叶子节点,以下是该实现的类设计图:
装饰模式
装饰模式(Decorator)是以对客户端透明的方式对对象功能的一种扩展,是基础方式的一种更好的替代方案。装饰模式的优点在于,装饰模式扩展对象比基础方式灵活,同时由很多小的装饰对象,可以组合出很多不同的对象行为。装饰模式的优点也是其缺点,首先,由于装饰模式比对象继承更加灵活,所以需要产生大量的小对象,即装饰对象本身,另外,就是由于其灵活性,导致出错的可能性更高,不通过的装饰结果,可能出现与预期不符的对象扩展。
装饰模型的Java实现代码点击这里下载
装饰模式的UML类图如下: