目 录CONTENT

文章目录
Go

创建型-🐑原型模式(Prototype Pattern)

Hello!你好!我是村望~!
2023-08-14 / 0 评论 / 0 点赞 / 153 阅读 / 660 字
温馨提示:
我不想探寻任何东西的意义,我只享受当下思考的快乐~

原型模式(Prototype Pattern)是一种创建型设计模式,它用于复制对象,而无需对其类型进行暴露。这允许我们基于现有对象创建新对象,而不必了解其内部细节。

在原型模式中,我们创建一个原型对象,然后通过克隆这个原型对象来创建新的对象实例。这有助于避免创建对象时的大量初始化和配置工作,提高了性能和灵活性。

当使用原型模式来处理数据库的实例时,您可以考虑一个场景:

您正在开发一个应用程序,该应用程序需要连接到数据库,并且您希望为每个用户创建一个独立的数据库连接实例。

使用原型模式,您可以基于一个数据库连接原型来轻松地创建和管理多个用户特定的数据库连接。

package main

import (
	"fmt"
	"time"
)

// 原型接口
type DatabasePrototype interface {
	Clone() DatabasePrototype
	Connect()
	Query(query string) string
}

// 具体数据库连接结构体
type ConcreteDatabase struct {
	Host     string
	Port     int
	Username string
	Password string
}

// 实现Clone方法
func (c *ConcreteDatabase) Clone() DatabasePrototype {
	copy := *c
	return &copy
}

func (c *ConcreteDatabase) Connect() {
  // 具体的connect逻辑省略~
	fmt.Printf("Connected to database at %s:%d\n", c.Host, c.Port)
}

func (c *ConcreteDatabase) Query(query string) string {
	result := fmt.Sprintf("Executing query '%s' on database %s", query, c.Host)
	return result
}

func main() {
	// 创建数据库连接原型
	prototype := &ConcreteDatabase{
		Host:     "localhost",
		Port:     3306,
		Username: "user",
		Password: "password",
	}

	// 用户1的数据库连接
	user1DB := prototype.Clone().(*ConcreteDatabase)
	user1DB.Connect()
	fmt.Println(user1DB.Query("SELECT * FROM users"))

	// 用户2的数据库连接
	user2DB := prototype.Clone().(*ConcreteDatabase)
	user2DB.Host = "example.com"
	user2DB.Connect()
	fmt.Println(user2DB.Query("SELECT * FROM products"))
}

在这个示例中,我们定义了一个 DatabasePrototype 接口,其中包含了创建、克隆、连接和查询的方法。然后,我们实现了一个 ConcreteDatabase 结构体来表示具体的数据库连接,同时也实现了 DatabasePrototype 接口的方法。我们使用原型模式创建了两个不同的数据库连接实例,其中一个是基于原型克隆的,另一个则在克隆后进行了一些自定义设置。

这个示例演示了如何使用原型模式来管理数据库连接实例,以及如何根据不同用户的需求创建定制的数据库连接。这种方式可以提高数据库连接的效率和灵活性。

0

评论区