implemented adapter pattern
This commit is contained in:
parent
9878d49d09
commit
0cb101cb12
@ -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
|
||||||
|
51
structural/adapter/adapter.go
Normal file
51
structural/adapter/adapter.go
Normal 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()
|
||||||
|
}
|
Reference in New Issue
Block a user