适配器模式
Adapter模式也被称为Wrapper模式,有以下两种:
- 类适配器(使用继承)
https://design-
实现目标接口,继承被适配类
- 对象适配器(使用委托)
继承目标类,依赖被适配类
参考http://blog.51cto.com/liuxp08...
package main
import (
"fmt"
)
func main() {
duck := &MallardDuck{}
turkey := &WildTurkey{}
turkeyAdapter := NewTurkeyAdapter(turkey)
fmt.Println("The Turkey says...")
turkey.gobble()
turkey.fly()
fmt.Println("The Duck says...")
duck.quack()
duck.fly()
fmt.Println("The Turkey Adapter says...")
turkeyAdapter.quack()
turkeyAdapter.fly()
}
type Duck interface {
quack()
fly()
}
type Turkey interface {
gobble()
fly()
}
type MallardDuck struct {
}
func (*MallardDuck) quack() {
fmt.Println("Quark...")
}
func (*MallardDuck) fly() {
fmt.Println("flying...")
}
type WildTurkey struct {
}
func (*WildTurkey) gobble() {
fmt.Println("Gobble...")
}
func (*WildTurkey) fly() {
fmt.Println("flying a short distance")
}
type TurkeyAdapter struct {
turkey Turkey
}
func NewTurkeyAdapter(turkey Turkey) *TurkeyAdapter {
return &TurkeyAdapter{turkey}
}
func (this *TurkeyAdapter) quack() {
this.turkey.gobble()
}
func (this *TurkeyAdapter) fly() {
for i := 0; i < 5; i++ {
this.turkey.fly()
}
}
适配器TurkeyAdpater,持有turkey Turkey,实现Duck接口。
代理模式
uml:
https://design-patterns.readt...
代理模式中的成员构成:
- Subject(主体)
- Proxy (代理人)
- RealSubject(实际的主体)
- Client (请求者)
代理的目的是在目标对象方法的基础上作增强,这种增强的本质通常就是对目标对象的方法进行拦截和过滤。
有疑问加站长微信联系(非本文作者)