设计模式——原型模式
2020-11-02 本文已影响0人
DevilRoshan
什么是原型模式?
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
实现
type Prototype interface {
Name() string
Clone() Prototype
}
type ConcretePrototype struct {
name string
}
func (this *ConcretePrototype) Name() string {
return this.name
}
func (this *ConcretePrototype) Clone() Prototype {
return &ConcretePrototype{name: this.name}
}
func TestConcretePrototypeClone(t *testing.T) {
name := "laoyang"
proto := ConcretePrototype{name:name}
newProto := proto.Clone()
assert.Equal(t, name, newProto.Name())
}
// === RUN TestConcretePrototypeClone
// --- PASS: TestConcretePrototypeClone (0.00s)
// PASS
优点
- 性能优良。不用重新初始化对象,而是动态地获取对象运行时的状态;
- 逃避构造函数的约束。
缺点
- 配置克隆方法需要对类的功能进行通盘考虑;
使用场景
- 资源优化场景;
- 性能和安全要求的场景;
- 一个对象多个修改者的场景;
- 一般与工厂方法模式一起出现,通过clone方法创建一个对象,然后由工厂方法提供给调用者。