结构型 --- 适配器模式
// 假设你有两个接口相互兼容的类:圆孔( Round Hole )和圆钉( Round Peg )。
class RoundHole is
constructor RoundHole ( radius ) { ... }
method getRadius () is
// 返回孔的半径。
method fits ( peg : RoundPeg ) is
return this . getRadius () >= peg . radius ()
class RoundPeg is
constructor RoundPeg ( radius ) { ... }
method getRadius () is
// 返回钉子的半径。
// 但还有一个不兼容的类:方钉( Square Peg )。
class SquarePeg is
constructor SquarePeg ( width ) { ... }
method getWidth () is
// 返回方钉的宽度。
// 适配器类让你能够将方钉放入圆孔中。它会对 RoundPeg 类进行扩展,以接收适
// 配器对象作为圆钉。
class SquarePegAdapter extends RoundPeg is
// 在实际情况中,适配器中会包含一个 SquarePeg 类的实例。
private field peg : SquarePeg
constructor SquarePegAdapter ( peg : SquarePeg ) is
this . peg = peg
method getRadius () is
// 适配器会假扮为一个圆钉,
// 其半径刚好能与适配器实际封装的方钉搭配起来。
return peg . getWidth () * Math . sqrt ( 2 ) / 2
// 客户端代码中的某个位置。
hole = new RoundHole ( 5 )
rpeg = new RoundPeg ( 5 )
hole . fits ( rpeg ) // true
small_sqpeg = new SquarePeg ( 5 )
large_sqpeg = new SquarePeg ( 10 )
hole . fits ( small_sqpeg ) // 此处无法编译(类型不一致)。
small_sqpeg_adapter = new SquarePegAdapter ( small_sqpeg )
large_sqpeg_adapter = new SquarePegAdapter ( large_sqpeg )
hole . fits ( small_sqpeg_adapter ) // true
hole . fits ( large_sqpeg_adapter ) // false
- 点赞
- 收藏
- 关注作者
评论(0)