lzh2nix / articles

用 issue 来管理个人博客
https://github.com/lzh2nix/articles
62 stars 13 forks source link

适配器/外观模式 #135

Open lzh2nix opened 3 years ago

lzh2nix commented 3 years ago

适配器模式

image

这是一个在生活中随处可见的模式,你在TB搜以下适配器会出来各种场景下的适配器。适配器的特点就是不修改使用方和调用方的就口的前提下将整体功能给很好的跑起来。 image 只需要新增一个Adapter就可以了。 对应的类结构如下: image

书里的举的这个例子很好,在早期的java中有一个Enumeration interface。

type Enumeratoion interface {
    HasMoreElements() bool
    NextElement() interface{}
}

而在新的系统中只有Iterator interface

type Iterator interface {
    HasNext() bool
    Next() interface{}
    Remove()
}

为了是适配两种interface我们需要定一个adapter。

type Iterator2EnumAdapter struct {
    enum Enumeratoion
}

func (adapter *Iterator2EnumAdapter) HasNext() bool {
    return adapter.enum.HasMoreElements()
}

func (adapter *Iterator2EnumAdapter) Next() interface{} {
    return adapter.enum.NextElement()
}

func (adapter *Iterator2EnumAdapter) Remove() {
    panic("not support")
}

外观模式

facade模式和适配器模式查不多, 不同点在于adapter对单个接口/对象做适配而facade是将多个对象组合之后对外提供简单的单一接口。这样使用方直接调用接口即可不用关心具体实现。 image