implemented adapter pattern

This commit is contained in:
ismayilmalik
2018-01-03 23:35:09 +03:00
parent 9878d49d09
commit 0cb101cb12
2 changed files with 56 additions and 0 deletions

View File

@@ -0,0 +1,51 @@
package adapter
//old bad service which we can't chane
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 ehich has state
//we have client only supports 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 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 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()
}