教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 Golang设计模式之原型模式

Golang设计模式之原型模式

发布时间:2022-02-15   编辑:jiaochengji.com
教程集为您提供Golang设计模式之原型模式等资源,欢迎您收藏本站,我们将为您提供最新的Golang设计模式之原型模式资源
<h1>原型模式(Prototype Pattern)</h1>

GitHub代码链接
原型模式用于创建重复的对象。当一个类在创建时开销比较大时(比如大量数据准备,数据库连接),我们可以缓存该对象,当下一次调用时,返回该对象的克隆。

<h2>原型模式是什么</h2>

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。通过实现克隆clone()操作,快速的生成和原型对象一样的实例。

<h2>解决了什么问题</h2> <ul><li>资源优化,类初始化要消耗非常多的资源,包括硬件,数据等资源。</li> <li>性能和安全要求的场景</li> <li>通过new产生一个对象需要非常繁琐的数据准备或访问权限,使用原型模式。</li> <li>一个对象多个修改者的场景</li> <li>实际项目中,原型模式大多和工厂模式一起出现,通过clone的方法返回一个对象,然后由工厂模式提供给调用者。</li> </ul><h3>优点</h3> <ul><li>性能提高</li> <li>逃避构造函数的约束</li> </ul><h3>缺点</h3> <ul><li>配备克隆方法要对类的功能进行通盘考虑,对于一些老的类不一定容易,特别当一些类引用不支持串行化的间接对象。</li> </ul><h2>代码实现</h2> <h3>1.1 定义一个拥有Clone方法的接口</h3> <pre><code class="lang-golang hljs">//ShapeClone 有克隆方法的接口 type ShapeClone interface { Clone() ShapeClone } </code></code></pre> <h3>1.2 原型管理类</h3>

实现一个原型管理类,用于保存所有原型。

<pre><code class="lang-golang hljs">//ShapeManager 模型管理类,用于保存所有Clone接口的原型 type ShapeManager struct { ShapeList map[string]ShapeClone } //NewShapeManager 新建模型管理类 func NewShapeManager() *ShapeManager { return &ShapeManager{ ShapeList: make(map[string]ShapeClone), } } //Set 添加原型 func (s *ShapeManager) Set(name string, proto ShapeClone) { s.ShapeList[name] = proto } //Get 获取原型 func (s *ShapeManager) Get(name string) ShapeClone { return s.ShapeList[name] } </code></code></pre> <h3>1.3 实现几个原型类</h3> <pre><code class="lang-golang hljs">//Circle 圆形类,实现shapeclone接口 type Circle struct { Name string } //NewCircle 新建一个CIrcle类 func NewCircle(name string) *Circle { return &Circle{Name: name} } //GetName 获取circle的名字 func (c *Circle) GetName() string { return c.Name } //Clone 返回circle类的复制 func (c *Circle) Clone() ShapeClone { circleClone := c return circleClone } //Draw circle的方法 func (c *Circle) Draw() { fmt.Println("Circle Draw().") } </code></code></pre> 到此这篇关于“ Golang设计模式之原型模式”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
深入php设计模式实例详解
Golang设计模式之原型模式
PHP设计模式概述
【Go】Golang 实现单例模式
php设计模式是什么,该如何理解
PHP设计模式之:原型模式学习笔记
php的设计模式是什么意思
JavaScript设计模式一:工厂模式和构造器模式
JQuery 确定css方框模型(盒模型Box Model)
Go并发模型:轻松入门流水线模型

[关闭]
~ ~