映射器是适配器模式的一个版本

ber*_*olo 5 java adapter mapper

我一直试图让我的头围绕适配器模式,在所有模式中,我最难想象它的用途.

我想我明白了实现了什么,对我而言,它是将对象转换为另一个接口,以便客户端可以使用它.

在示例中,我看到它们有意义,但我觉得我可以使用一个映射器实现相同的功能,该映射器接受一个对象并将其属性(也可能应用一些逻辑)映射到所需的对象类型,因此使用真实对象.

是否存在差异,或者它们的名称是否相同?

Tre*_*ick 15

可以认为适配器不是新对象(如Mapper)的创建者,而是作为接口转换器.

Mapper m = new Mapper()
Dog dog = (Dog) m.mapRow(resultSet); // creating new object
Run Code Online (Sandbox Code Playgroud)

cat实例仍然存在于此处,未创建新的"dog实例",而是创建DogAdapter实例并将cat对象"适应"到Dog接口.

Cat cat = new Cat("Felix");
Dog dog = new DogAdapter(cat); // cat  still exists
dog.bark(); // yields 'meow'
Run Code Online (Sandbox Code Playgroud)

这些显然是人为的例子,但希望它们能帮助你更好地理解.

  • 有时,复制数据以支持目标接口(在这种情况下,Dog是目标接口)要比简单地转换调用更为昂贵。将远程接口适配到另一个接口是另一个示例,在该示例中,属性可能基于后端数据而更改,您不想复制属性,因为这将提供“快照”,而不是“当前”值。 (2认同)