发布日期

GoLang 设计模式之建造者模式 (Prototype)

软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设 计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

🐑 原型模式 (Prototype)

现实世界的例子:记得多莉?被克隆的羊!让我们不详细介绍,但关键点在于它完全是关于克隆的 简单来说:通过克隆基于现有对象创建对象。 简而言之,它允许您创建现有对象的副本并根据需要进行修改,而不是从头开始创建对象并进行设置。

代码实现 (源码

package examples

import "fmt"

// Sheep 🐑
type Sheep struct {
    name     string
    category string
}

// SetName ...
func (sp *Sheep) SetName(name string) {
    sp.name = name
}

// GetName ...
func (sp *Sheep) GetName() string {
    return sp.name
}

// SeCategory ...
func (sp *Sheep) SeCategory(category string) {
    sp.category = category
}

// GetCategory ...
func (sp *Sheep) GetCategory() string {
    return sp.category
}

// Clone 克隆一个一摸一样的 🐑
func (sp *Sheep) Clone() *Sheep {
    clonesp := *sp
    return &clonesp
}

// GetDescription ...
func (sp *Sheep) GetDescription() {
    fmt.Printf(" 🐑 的名字:%v ;🐑 的种类:%v \n", sp.name, sp.category)
}

// NewSheep 工厂方法创建一只 🐑
func NewSheep() *Sheep {
    return &Sheep{}
}

测试用例(源码

package examples

import "testing"

// command: go test -v prototype_test.go prototype.go
func TestPrototype(t *testing.T) {
    t.Log("创建一只 🐑")
    sheep := NewSheep()
    sheep.SetName("Jolly")
    sheep.SeCategory("山地绵羊")

    t.Log("克隆一只 🐑")
    clonesheep := sheep.Clone()
    clonesheep.SetName("Dolly")
    clonesheep.SeCategory("澳大利亚绵羊")

    if sheep.GetName() != "Jolly" || sheep.GetCategory() != "山地绵羊" {
        t.Fail()
    }

    if clonesheep.GetName() != "Dolly" || clonesheep.GetCategory() != "澳大利亚绵羊" {
        t.Fail()
    }

}

注意

  • 设计模式不是解决所有问题的灵丹妙药。

  • 不要试图强迫他们; 如果这样做的话,应该发生坏事。

  • 请记住,设计模式是问题的解决方案,而不是解决问题的解决方案;所以不要过分思考。

  • 如果以正确的方式在正确的地方使用,他们可以证明是救世主; 否则他们可能会导致代码混乱。

声明

备案号:湘ICP备2020019075号 © 2020 yxx All rights reserved. | my github