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) - [Abstract Factory](#abstract-factory)
- [Structural patterns](#structural-patterns) - [Structural patterns](#structural-patterns)
- [Composition](#composition) - [Composition](#composition)
- [Adapter](#adapter)
- [Behavioral patterns](#behavioral-patterns) - [Behavioral patterns](#behavioral-patterns)
- [Chain of responsibility](#chain-of-responsibility) - [Chain of responsibility](#chain-of-responsibility)
- [Strategy](#strategy) - [Strategy](#strategy)
@ -49,6 +50,10 @@ more classes into one.
Compose objects into tree structures to represent part-whole hierarchies. Composite Compose objects into tree structures to represent part-whole hierarchies. Composite
lets clients treat individual objects and compositions of objects uniformly. 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
Behavioral patterns are concerned with algorithms and the assignment of responsibilities Behavioral patterns are concerned with algorithms and the assignment of responsibilities
between objects. Behavio ral patterns describe not just patterns of objects or classes 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()
}