前言
个人感觉Adapter模式核心就在于接口之间的转换。将已有的一些接口转换成其他接口形式。并且一般用于对象上,而不是系统上
问题
就用一个简单的问题,懂数据结构的同学可能知道双端队列。那么就用双端队列实现一个栈(stack)或者是普通队列(queue)
解决方案
Go
type Stack struct {
element *list.List
}
func NewStack() *Stack {
return &Stack{
element: list.New(),
}
}
func (s *Stack) Push(value interface{}) {
s.element.PushBack(value)
}
func (s *Stack) Pop() interface{} {
lastElement := s.element.Back()
if lastElement != nil {
s.element.Remove(lastElement)
return lastElement.Value
}
return nil
}
上面的代码就是一个栈的简单实现。仅仅是把list的功能直接拿来修改了一下。
总结
适配器遵循开闭原则。 只要客户端代码通过客户端接口与适配器进行交互, 你就能在不修改现有客户端代码的情况下在程序中添加新类型的适配器。
但同样代码整体复杂度增加, 因为你需要新增一系列接口和类。 有时直接更改服务类使其与其他代码兼容会更简单。
适配器模式的核心设计思想,是对对象级别的进行修改,并且利用已有功能进行修改,范围较小。