package adapter
type Adapter interface {
    Request() string
}
type Adaptee interface {
    SpecificRequest() string
}
func NewAdaptee() Adaptee{
    return &adapteeImpl{}
}
type adapteeImpl struct{}
func (*adapteeImpl) SpecificRequest() string{
    return "this is specific method"
}
type adapterImpl struct {
    Adaptee
}
func NewAdapter(a Adaptee) Adapter{
    return &adapterImpl{
        Adaptee: a,
    }
}
func (a *adapterImpl) Request() string{
    return a.SpecificRequest();
}