Skip to content

Commit

Permalink
add adapter
Browse files Browse the repository at this point in the history
  • Loading branch information
sioncojp committed Apr 10, 2018
1 parent af86c36 commit 5c2aa4d
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 0 deletions.
15 changes: 15 additions & 0 deletions adapter/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# adapter
インターフェイスに互換性のないクラス同士を組み合わせる
継承や移譲を利用した手法がある

### メリット
* 既存のクラスに対して修正を加えること無くインターフェイスを変更出来る
* 一貫したインターフェイスの提供

### デメリット
* unit testしづらい
* 安易に使い回すとスパゲティになるかも
* 小さいパーツに、シンプルに、疎結合にすること

### Goのadapter
Goはinterfaceがあり、structの埋め込みがあるのでadapterはそれで事足りる
24 changes: 24 additions & 0 deletions adapter/adapter.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package adapter

import "fmt"

type FruitPrice interface {
getPrice()
}

type Fruit struct {
Name string
Cost int
}

type FruitAdapter struct {
Fruit
}

func (s *FruitAdapter) GetPrice() {
s.Fruit.GetPrice()
}

func (s *Fruit) GetPrice() {
fmt.Printf("%s: %d\n", s.Name, s.Cost)
}
11 changes: 11 additions & 0 deletions adapter/adapter_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package adapter

import "testing"

func TestAdapterExtends(t *testing.T) {
f1 := &Fruit{"Apple", 100}
f2 := &FruitAdapter{*f1}

f1.GetPrice()
f2.GetPrice()
}

0 comments on commit 5c2aa4d

Please sign in to comment.