0%

[设计模式]结构型模式-2013

Adapter(适配器)

在设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类别自己的接口包裹在一个已存在的类中。
有两类适配器模式:

  • 对象适配器模式 - 在这种适配器模式中,适配器容纳一个它我包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。
  • 类适配器模式 - 这种适配器模式下,适配器继承自已实现的类(一般多重继承)。

Bridge(桥接)

在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。

UML图例


举个栗子

比如一个动物IAnimal, 有移动,呼吸,吃东西,繁殖四种行为.我们把这几种行为都抽象出来, 变成IMovable,IBreathable,IEatable,IBreedable. 上面的四个接口, 每个接口都有若干种实现方式, 比如IMovableSwamable,Runnable,Fliable三种实现方式. 这样, 我们定义或者说添加一种新动物AnimalNew的时候, 只需把对应的行为方式组装到AnimalNew中即可.

深刻体会过的例子是游戏的背包系统. 背包中每个物品有交易(买卖),穿戴(佩戴),损耗(随着某个变量而效果减少),作用(属性加成),生成tips…等行为

解决了什么问题

如果一个实体类的某个行为有多种实现方式, 我们一般用继承来协调他们. 假设一个实体类的有n种行为. 每种行为有f(n)种实现方式, 那么我们继承的代价就是n*f(n)。继承机制将抽象部分与他的实现部分固定在一起,使得难以对抽象部分和实现部分独立地进行修改、扩充和充用。
如果用桥接模式,把每种行为都抽象出来,则会更加灵活.

其实我觉得Bridge的本质就是把该抽象的都抽象出来,每个接口只表示一种行为.

参考博客:

##