forked from senghoo/golang-design-pattern
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
62 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
# 适配器模式 | ||
|
||
适配器模式用于转换一种接口适配另一种接口。 | ||
|
||
实际使用中Adaptee一般为接口,并且使用工厂函数生成实例。 | ||
|
||
在Adapter中匿名组合Adaptee接口,所以Adapter类也拥有SpecificRequest实例方法,又因为Go语言中非入侵式接口特征,其实Adapter也适配Adaptee接口。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
package adapter | ||
|
||
//Target 是适配的目标接口 | ||
type Target interface { | ||
Request() string | ||
} | ||
|
||
//Adaptee 是被适配的目标接口 | ||
type Adaptee interface { | ||
SpecificRequest() string | ||
} | ||
|
||
//NewAdaptee 是被适配接口的工厂函数 | ||
func NewAdaptee() Adaptee { | ||
return &adapteeImpl{} | ||
} | ||
|
||
//AdapteeImpl 是被适配的目标类 | ||
type adapteeImpl struct{} | ||
|
||
//SpecificRequest 是目标类的一个方法 | ||
func (*adapteeImpl) SpecificRequest() string { | ||
return "adaptee method" | ||
} | ||
|
||
//NewAdapter 是Adapter的工厂函数 | ||
func NewAdapter(adaptee Adaptee) Target { | ||
return &adapter{ | ||
Adaptee: adaptee, | ||
} | ||
} | ||
|
||
//Adapter 是转换Adaptee为Target接口的适配器 | ||
type adapter struct { | ||
Adaptee | ||
} | ||
|
||
//Request 实现Target接口 | ||
func (a *adapter) Request() string { | ||
return a.SpecificRequest() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package adapter | ||
|
||
import "testing" | ||
|
||
var expect = "adaptee method" | ||
|
||
func TestAdapter(t *testing.T) { | ||
adaptee := NewAdaptee() | ||
target := NewAdapter(adaptee) | ||
res := target.Request() | ||
if res != expect { | ||
t.Fatalf("expect: %s, actual: %s", expect, res) | ||
} | ||
} |