[设计模式 Go实现] 创建型~ 原型模式

简介: [设计模式 Go实现] 创建型~ 原型模式

原型模式使对象能复制自身,并且暴露到接口中,使客户端面向接口编程时,不知道接口实际对象的情况下生成新的对象。

原型模式配合原型管理器使用,使得客户端在不知道具体类的情况下,通过接口管理器得到新的实例,并且包含部分预设定配置。

代码实现

package prototype

//Cloneable 是原型对象需要实现的接口
type Cloneable interface {
  Clone() Cloneable
}

type PrototypeManager struct {
  prototypes map[string]Cloneable
}

func NewPrototypeManager() *PrototypeManager {
  return &PrototypeManager{
    prototypes: make(map[string]Cloneable),
  }
}

func (p *PrototypeManager) Get(name string) Cloneable {
  return p.prototypes[name].Clone()
}

func (p *PrototypeManager) Set(name string, prototype Cloneable) {
  p.prototypes[name] = prototype
}

单元测试

package prototype

import "testing"

var manager *PrototypeManager

type Type1 struct {
  name string
}

func (t *Type1) Clone() Cloneable {
  tc := *t
  return &tc
}

type Type2 struct {
  name string
}

func (t *Type2) Clone() Cloneable {
  tc := *t
  return &tc
}

func TestClone(t *testing.T) {
  t1 := manager.Get("t1")

  t2 := t1.Clone()

  if t1 == t2 {
    t.Fatal("error! get clone not working")
  }
}

func TestCloneFromManager(t *testing.T) {
  c := manager.Get("t1").Clone()

  t1 := c.(*Type1)
  if t1.name != "type1" {
    t.Fatal("error")
  }

}

func init() {
  manager = NewPrototypeManager()

  t1 := &Type1{
    name: "type1",
  }
  manager.Set("t1", t1)
}
目录
打赏
0
3
3
1
40
分享
相关文章
「全网最细 + 实战源码案例」设计模式——原型模式
原型模式(Prototype Pattern)是一种创建型设计模式,通过复制现有对象来创建新对象,适用于创建成本高或复杂的对象场景。其核心思想是“克隆”,避免直接实例化类。结构上分为抽象原型类、具体原型类和客户端。优点包括减少对象创建成本、隐藏复杂性、简化实例创建;缺点是处理循环引用的复杂对象时较为麻烦。实现步骤为定义原型类、重写`clone()`方法并调用。注意事项包括浅拷贝与深拷贝的区别及`Cloneable`接口的使用。
57 20
**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合
【6月更文挑战第23天】**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合。工厂模式专注于单个对象,通过具体工厂创建具体产品,适用于简单对象创建;抽象工厂则关注一系列相关产品,提供创建一族对象的接口,适用于处理多个不兼容产品族。选择模式基于问题域的复杂性,单个产品需求时用工厂模式,多产品族时用抽象工厂模式。
45 5
【Java笔记+踩坑】设计模式——原型模式
对比原型模式和传统方式的实现思路、代码方案、优缺点,阐述原型模式的使用场景,以及深拷贝、浅拷贝等相关概念,并扩展原型模式在Spring源码中的应用。
第二篇 创建型设计模式 - 灵活、解耦的创建机制
第二篇 创建型设计模式 - 灵活、解耦的创建机制
106 0
Java设计模式-原型模式(3)
Java设计模式-原型模式(3)
Java设计模式-原型模式(3)
iLogtail设计模式问题之iLogtail中的原型模式是什么
iLogtail设计模式问题之iLogtail中的原型模式是什么
iLogtail设计模式问题之iLogtail中的原型模式是什么
Go语言设计模式:使用Option模式简化类的初始化
在Go语言中,面对构造函数参数过多导致的复杂性问题,可以采用Option模式。Option模式通过函数选项提供灵活的配置,增强了构造函数的可读性和可扩展性。以`Foo`为例,通过定义如`WithName`、`WithAge`、`WithDB`等设置器函数,调用者可以选择性地传递所需参数,避免了记忆参数顺序和类型。这种模式提升了代码的维护性和灵活性,特别是在处理多配置场景时。
89 8
js设计模式【详解】—— 原型模式
js设计模式【详解】—— 原型模式
70 6

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等