Skip to content

Commit 173ce4e

Browse files
committed
finish adapter pattern
1 parent 957832b commit 173ce4e

File tree

3 files changed

+62
-0
lines changed

3 files changed

+62
-0
lines changed

02_adapter/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# 适配器模式
2+
3+
适配器模式用于转换一种接口适配另一种接口。
4+
5+
实际使用中Adaptee一般为接口,并且使用工厂函数生成实例。
6+
7+
在Adapter中匿名组合Adaptee接口,所以Adapter类也拥有SpecificRequest实例方法,又因为Go语言中非入侵式接口特征,其实Adapter也适配Adaptee接口。

02_adapter/adapter.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package adapter
2+
3+
//Target 是适配的目标接口
4+
type Target interface {
5+
Request() string
6+
}
7+
8+
//Adaptee 是被适配的目标接口
9+
type Adaptee interface {
10+
SpecificRequest() string
11+
}
12+
13+
//NewAdaptee 是被适配接口的工厂函数
14+
func NewAdaptee() Adaptee {
15+
return &adapteeImpl{}
16+
}
17+
18+
//AdapteeImpl 是被适配的目标类
19+
type adapteeImpl struct{}
20+
21+
//SpecificRequest 是目标类的一个方法
22+
func (*adapteeImpl) SpecificRequest() string {
23+
return "adaptee method"
24+
}
25+
26+
//NewAdapter 是Adapter的工厂函数
27+
func NewAdapter(adaptee Adaptee) Target {
28+
return &adapter{
29+
Adaptee: adaptee,
30+
}
31+
}
32+
33+
//Adapter 是转换Adaptee为Target接口的适配器
34+
type adapter struct {
35+
Adaptee
36+
}
37+
38+
//Request 实现Target接口
39+
func (a *adapter) Request() string {
40+
return a.SpecificRequest()
41+
}

02_adapter/adapter_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package adapter
2+
3+
import "testing"
4+
5+
var expect = "adaptee method"
6+
7+
func TestAdapter(t *testing.T) {
8+
adaptee := NewAdaptee()
9+
target := NewAdapter(adaptee)
10+
res := target.Request()
11+
if res != expect {
12+
t.Fatalf("expect: %s, actual: %s", expect, res)
13+
}
14+
}

0 commit comments

Comments
 (0)