5. 原型模式(Prototype)
5. 原型模式(Prototype)
问题:创建对象成本高(属性多或计算复杂),想基于已有对象克隆。
核心:通过克隆已有实例来创建新对象,而不是从头 new。
const prototype = {
greet() { return `你好,我是${this.name}`; },
clone() { return Object.create(this); }
};
const personA = prototype.clone();
personA.name = '小明';
const personB = prototype.clone();
personB.name = '小红';
console.log(personA.greet()); // 你好,我是小明
console.log(personB.greet()); // 你好,我是小红package prototype
import "fmt"
type Prototype interface {
Clone() Prototype
Greet() string
}
type Person struct {
Name string
Age int
}
func (p *Person) Clone() Prototype {
return &Person{Name: p.Name, Age: p.Age}
}
func (p *Person) Greet() string {
return fmt.Sprintf("你好,我是%s", p.Name)
}JavaScript 的原型链本身就是这个思想的体现。
Object.create()是最直接的原型克隆方式。