52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package adapter
|
|
|
|
//old, bad service which we can't change
|
|
type OldEmailSender interface {
|
|
Send(from, to, subject, body string) error
|
|
}
|
|
|
|
type OldEmailSvc struct{}
|
|
|
|
func (s OldEmailSvc) Send(from, to, subject, body string) error {
|
|
//Send email...
|
|
return nil
|
|
}
|
|
|
|
//new service which has state
|
|
//we have a client only supporting this interface
|
|
type NewEmailSender interface {
|
|
Send() error
|
|
}
|
|
|
|
type NewEmailService struct {
|
|
From, To, Subject, Body string
|
|
}
|
|
|
|
func (s NewEmailService) Send() error {
|
|
//state already initialized just send
|
|
return nil
|
|
}
|
|
|
|
//adapter for the old email service
|
|
type OldEmailServiceAdapter struct {
|
|
From, To, Subject, Body string
|
|
OldEmailService OldEmailSender
|
|
}
|
|
|
|
func (a OldEmailServiceAdapter) Send() error {
|
|
return a.OldEmailService.Send(a.From, a.To, a.Subject, a.Body)
|
|
}
|
|
|
|
/*
|
|
client which only supports the new email service interface
|
|
EmailClient{ Mail: OldEmailServiceAdapter{...}} old service
|
|
EmailClient{ Mail: NewEmailService{...}} new service
|
|
*/
|
|
type EmailClient struct {
|
|
Mail NewEmailSender
|
|
}
|
|
|
|
func (e EmailClient) SendEmail(From, To, Subject, Body string) error {
|
|
return e.Mail.Send()
|
|
}
|