読者です 読者をやめる 読者になる 読者になる

Go言語入門 / golang入門 デザインパターン Singleton

f:id:nasust:20161122141513p:plain The Go gopher was designed by Renee French. (http://reneefrench.blogspot.com/) CC3.0

こんにちはnasustです。前回はデザインパターンのPrototypeの実装を解説します。今回もオブジェクト指向デザインパターンをどうやって実現するか解説します。

Wikipediaデザインパターンを参考にGo言語 / golangで実装しました。

Singleton パターン - Wikipedia

common/common.go

package common

import "fmt"

type Hoge interface {
    PrintMessage()
}

type hogeImpl struct {
}

func (hoge *hogeImpl) PrintMessage() {
    fmt.Printf("View Address: HogeImpl: %p\n", hoge)
}

var hoge = &hogeImpl{}

func GetInstance() Hoge {
    return hoge
}

singleton.go

package main

import "./common"

func main() {
    hoge := common.GetInstance()
    hoge.PrintMessage()

    hoge2 := common.GetInstance()
    hoge2.PrintMessage()
}

今回は二つのソースから実装しています。Go言語 / golangはクラス 無く、構造体しかありません。構造体のコピーを禁止することは出来ません。

Singletonパターンの条件は、実体が唯一であること実体を複製出来なことです。

それを満たす為にinterface型とパッケージの可視性を利用します。 実体するのは、common.goのhogeImpl構造体です。commonパッケージ内だけ参照できるhoge変数に参照を設定します。

hogeImpl構造体はHogeインターフェイスを実装しています。commonパッケージ 公開しているGetInstance関数でHogeインターフェイスを返します。

インターフェイス型で返すことで構造体をコピーすることが出来なくなります。インターフェイス型は参照型ですので、得たインターフェイスの値をコピーしても構造体はコピーされません。


Go言語 / golang 入門 目次に戻る

広告を非表示にする