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

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

Go言語 / golang プログラミング Go言語入門 / golang 入門

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

こんにちはnasustです。 前回は、interface型と構造体の埋め込みで、多様性を継承と同じようなことが実現出来ることを解説しました。

今回は、オブジェクト指向デザインパターンをGo言語 / golangでどうやって実現するか解説したいと思います。

Abstract Factory の実装

Abstract Factory パターン - Wikipedia

Wikipediaの解説を元にGo言語 / golangでプログラミングしてみます。

package main

import "fmt"

//interface /////////////////////////////

type Product1 interface {
    Print1()
}

type Product2 interface {
    Print2()
}

type AbstractFactory interface {
    CreateProduct1() Product1
    CreateProduct2() Product2
}

//implements ///////////////////////////

type ConcreateProduct1 struct {
}

func (product1 *ConcreateProduct1) Print1() {
    fmt.Println("ConcreateProduct1")
}

type ConcreateProduct2 struct {
}

func (product1 *ConcreateProduct2) Print2() {
    fmt.Println("ConcreateProduct2")
}

type ConcreateFactory struct {
}

func (factory *ConcreateFactory) CreateProduct1() Product1 {
    return &ConcreateProduct1{}
}

func (factory *ConcreateFactory) CreateProduct2() Product2 {
    return &ConcreateProduct2{}
}

func NewConcreateFactory() AbstractFactory {
    return &ConcreateFactory{}
}

func Product1Print1(product1 Product1) {
    product1.Print1()
}

func Product2Print2(product2 Product2) {
    product2.Print2()
}

func main() {
    factory := NewConcreateFactory()
    product1 := factory.CreateProduct1()
    product2 := factory.CreateProduct2()

    Product1Print1(product1)
    Product2Print2(product2)
}

このように実装しました。親クラスというものが無いので全てinterface型を返すようになっています。

実行すると

ConcreateProduct1
ConcreateProduct2

が表示されます。


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

広告を非表示にする