ファクトリ パターン Go では、ファクトリ パターンを使用すると、具体的なクラスを指定せずにオブジェクトを作成できます。オブジェクトを表すインターフェイス (Shape など) を定義します。インターフェイスを実装する具象型 (Circle や Rectangle など) を作成します。ファクトリ クラスを作成して、特定のタイプのオブジェクト (たとえば、ShapeFactory) を作成します。ファクトリ クラスを使用して、クライアント コードでオブジェクトを作成します。この設計パターンにより、具体的な型に直接結合することなく、コードの柔軟性が向上します。
はじめに
ファクトリ パターンは、次のことを可能にするデザイン パターンです。具体的なクラスを指定せずにオブジェクトを作成します。これは、特定のインターフェイスを持つオブジェクト インスタンスを作成して返すことを担当するファクトリ クラスを作成することによって実現できます。
実装
Golang では、interface{}
と type
を使用してファクトリ パターンを作成できます。まず、作成するオブジェクトを表すインターフェイスを定義する必要があります。例としてシェイプ ファクトリの作成を考えてみましょう:
type Shape interface { Area() float64 Perimeter() float64 }
次に、Shape
インターフェイスを実装する特定のシェイプ タイプを作成する必要があります:
type Circle struct { radius float64 } func (c *Circle) Area() float64 { return math.Pi * c.radius * c.radius } func (c *Circle) Perimeter() float64 { return 2 * math.Pi * c.radius }
type Rectangle struct { length float64 width float64 } func (r *Rectangle) Area() float64 { return r.length * r.width } func (r *Rectangle) Perimeter() float64 { return 2 * (r.length + r.width) }
Factory
これで、指定された型に従ってシェイプ オブジェクトの作成を担当するファクトリ クラスを作成できます。
type ShapeFactory struct{} func (f *ShapeFactory) CreateShape(shapeType string) Shape { switch shapeType { case "circle": return &Circle{} case "rectangle": return &Rectangle{} default: return nil } }
実用的なケース
この場合、ファクトリ クラスを使用して、クライアント コードでシェイプ オブジェクトを作成できます。
factory := &ShapeFactory{} circle := factory.CreateShape("circle") circle.radius = 5 fmt.Println("Circle area:", circle.Area()) rectangle := factory.CreateShape("rectangle") rectangle.length = 10 rectangle.width = 5 fmt.Println("Rectangle area:", rectangle.Area())
出力結果:
Circle area: 78.53981633974483 Rectangle area: 50
結論
渡された Factory パターンを使用すると、特定の形状を指定せずに形状オブジェクトを作成できます。これにより、コードがより柔軟になり、保守しやすくなります。
以上がGolangでファクトリーパターンを適用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。