Adapterパターンの構成
- target
- adaptee
- adapter
- client
import ("fmt")
//Iprocess interface == Target
//インターフェイス定義は type インターフェイス名 interface {持っているメソッド}
type IProcess interface {
process()
}
//Adapter struct
//クラス定義は type クラス名 struct {属性名 属性の型} で指定
type Adapter struct {
adaptee Adaptee
}
//AdapterクラスはAdaptee.convert()を呼び出すprocessメソッドを持つ
//アダプタはアダプティの互換性のないインターフェイスを、クライアントが望むインターフェイスに変換する
//なるほどクラスメソッドは func (変数名 型<=レシーバー) method(parameter) (return) {処理} で書くっぽい
// This method means type Adapter implements the interface IProcess,
// but we don't need to explicitly declare that it does so.
func (adapter Adapter) process() {
fmt.Println("Adapter process")
adapter.adaptee.convert()
}
//Adaptee Struct
type Adaptee struct {
adapterType int
}
//Adaptee 用のインターフェイス
func (adaptee Adaptee) convert() {
fmt.Println("Adaptee convert method",adaptee.adapterType)
}
//main method
//クラスの呼び出しは クラス名{インスタンス変数}
func main() {
//クライエントがアダプタが実装する互換性のないインターフェイスを求めている
var processor IProcess = Adapter{Adaptee{3}}
processor.process()
}
main()