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

@ -14,6 +14,7 @@
- [Abstract Factory](#abstract-factory)
- [Structural patterns](#structural-patterns)
- [Composition](#composition)
- [Adapter](#adapter)
- [Behavioral patterns](#behavioral-patterns)
- [Chain of responsibility](#chain-of-responsibility)
- [Strategy](#strategy)
@ -49,6 +50,10 @@ more classes into one.
Compose objects into tree structures to represent part-whole hierarchies. Composite
lets clients treat individual objects and compositions of objects uniformly.
### Adapter
Convert the interfac e of a class into another interface clients expect. Adapter lets
classes work together that couldn' t otherwise because of incompatible interfaces.
## Behavioral patterns
Behavioral patterns are concerned with algorithms and the assignment of responsibilities
between objects. Behavio ral patterns describe not just patterns of objects or classes

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()
}