软件设计模式(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()
}
}
注意
-
设计模式不是解决所有问题的灵丹妙药。
-
不要试图强迫他们; 如果这样做的话,应该发生坏事。
-
请记住,设计模式是问题的解决方案,而不是解决问题的解决方案;所以不要过分思考。
-
如果以正确的方式在正确的地方使用,他们可以证明是救世主; 否则他们可能会导致代码混乱。
声明
- 转载请注明出处
- 本文链接(https://blog.you-tang.com/detail/20)