国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

原型設(shè)計模式go實現(xiàn)嘗試

這篇具有很好參考價值的文章主要介紹了原型設(shè)計模式go實現(xiàn)嘗試。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

本文章嘗試使用go實現(xiàn)“原型”。


代碼

package main

import (
	"fmt"
)

// 不同原型標(biāo)志枚舉
type Type int

const (
	PROTOTYPE_1 Type = iota
	PROTOTYPE_2
)

// 原型接口
type IPrototype interface {
	Clone() IPrototype
	Method(value int)
	Print()
}

// 具體原型1
type ConcretePrototype1 struct {
	name  string
	value int
}

// 構(gòu)造函數(shù)
func NewConcretePrototype1ByFields(name string, value int) *ConcretePrototype1 {
	return &ConcretePrototype1{
		name,
		value,
	}
}

func NewConcretePrototype1ByObject(cp *ConcretePrototype1) *ConcretePrototype1 {
	return &ConcretePrototype1{
		name:  cp.name,
		value: cp.value,
	}
}

// 接口方法
func (cp *ConcretePrototype1) Clone() IPrototype {
	return NewConcretePrototype1ByObject(cp)
}

func (cp *ConcretePrototype1) Method(value int) {
	cp.value = value
}

func (cp *ConcretePrototype1) Print() {
	fmt.Println("Call Method1 from ", cp.name, " with field : ", cp.value)
}

// 具體原型2
type ConcretePrototype2 struct {
	name  string
	value int
}

// 構(gòu)造函數(shù)
func NewConcretePrototype2ByFields(name string, value int) *ConcretePrototype2 {
	return &ConcretePrototype2{
		name,
		value,
	}
}

func NewConcretePrototype2ByObject(cp *ConcretePrototype2) *ConcretePrototype2 {
	return &ConcretePrototype2{
		name:  cp.name,
		value: cp.value,
	}
}

// 接口方法
func (cp *ConcretePrototype2) Clone() IPrototype {
	return NewConcretePrototype2ByObject(cp)
}

func (cp *ConcretePrototype2) Method(value int) {
	cp.value = value
}

func (cp *ConcretePrototype2) Print() {
	fmt.Println("Call Method2 from ", cp.name, " with field : ", cp.value)
}

// 原型工廠
type PrototypeFactory struct {
	prototypes map[Type]IPrototype
}

func NewPrototypeFactory() *PrototypeFactory {
	return &PrototypeFactory{
		prototypes: map[Type]IPrototype{
			PROTOTYPE_1: NewConcretePrototype1ByFields("PROTOTYPE_1 ", 1),
			PROTOTYPE_2: NewConcretePrototype2ByFields("PROTOTYPE_2 ", 2),
		},
	}
}

func (p *PrototypeFactory) CreatePrototype(t Type) IPrototype {
	return p.prototypes[t].Clone()
}

// 客戶端代碼
func clientCode(p *PrototypeFactory) {
	fmt.Println("Let's create a Prototype 1")

	prototype1 := p.CreatePrototype(PROTOTYPE_1)
	prototype2 := p.CreatePrototype(PROTOTYPE_1)
	prototype1.Method(3)
	prototype2.Method(4)
	prototype1.Print()
	prototype2.Print()

	fmt.Println()

	fmt.Println("Let's create a Prototype 2")

	prototype1 = p.CreatePrototype(PROTOTYPE_2)
	prototype2 = p.CreatePrototype(PROTOTYPE_2)
	prototype1.Method(5)
	prototype2.Method(6)
	prototype1.Print()
	prototype2.Print()
}

func main() {
	clientCode(NewPrototypeFactory())
}

結(jié)果

Let's create a Prototype 1
Call Method1 from  PROTOTYPE_1   with field :  3
Call Method1 from  PROTOTYPE_1   with field :  4

Let's create a Prototype 2
Call Method2 from  PROTOTYPE_2   with field :  5
Call Method2 from  PROTOTYPE_2   with field :  6

總結(jié)

新人設(shè)計模式理解,望大家多多指點。文章來源地址http://www.zghlxwxcb.cn/news/detail-613893.html

到了這里,關(guān)于原型設(shè)計模式go實現(xiàn)嘗試的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 設(shè)計模式之原型模式Prototype的C++實現(xiàn)

    設(shè)計模式之原型模式Prototype的C++實現(xiàn)

    1、原型模式提出 在軟件功能設(shè)計中,經(jīng)常面臨著“某些結(jié)構(gòu)復(fù)雜的對象”的創(chuàng)建工作,且創(chuàng)建的對象想擁有其他對象在某一刻的狀態(tài),則可以使用原型模型。原型模型是通過拷貝構(gòu)造函數(shù)來創(chuàng)建對象,并且該對象擁有其他對象在某一刻的狀態(tài)。 2、需求描述 設(shè)計產(chǎn)品A,B,這

    2024年02月12日
    瀏覽(21)
  • [設(shè)計模式Java實現(xiàn)附plantuml源碼~創(chuàng)建型] 對象的克隆~原型模式

    [設(shè)計模式Java實現(xiàn)附plantuml源碼~創(chuàng)建型] 對象的克隆~原型模式

    前言: 為什么之前寫過Golang 版的設(shè)計模式,還在重新寫 Java 版? 答:因為對于我而言,當(dāng)然也希望對正在學(xué)習(xí)的大伙有幫助。Java作為一門純面向?qū)ο蟮恼Z言,更適合用于學(xué)習(xí)設(shè)計模式。 為什么類圖要附上uml 因為很多人學(xué)習(xí)有做筆記的習(xí)慣,如果單純的只是放一張圖片,那

    2024年01月23日
    瀏覽(26)
  • 【設(shè)計模式——學(xué)習(xí)筆記】23種設(shè)計模式——原型模式Prototype(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實現(xiàn))

    【設(shè)計模式——學(xué)習(xí)筆記】23種設(shè)計模式——原型模式Prototype(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實現(xiàn))

    原型模式指用通過拷貝原型實例創(chuàng)建新的實例,新實例和原型實例的屬性完全一致 原型模式是一種創(chuàng)建型設(shè)計模式 工作原理是通過調(diào)用原型實例的 clone() 方法來完成克隆,原型實例需要實現(xiàn)Cloneable接口,并重寫 clone() 方法 需要為每個類開發(fā)一個克隆方法,這對全新的類來說

    2024年02月16日
    瀏覽(57)
  • 【設(shè)計模式】使用 go 語言實現(xiàn)簡單工廠模式

    最近在看《大話設(shè)計模式》,這本書通過對話形式講解設(shè)計模式的使用場景,有興趣的可以去看一下。 第一篇講的是 簡單工廠模式 ,要求輸入兩個數(shù)和運算符號,得到運行結(jié)果。 這個需求不難,難就難在類要怎么設(shè)計,才能達到可復(fù)用、維護性強、可拓展和靈活性高。 運

    2024年02月05日
    瀏覽(31)
  • 二十三種設(shè)計模式全面解析-原型模式進階之原型管理器:集中管理對象原型的設(shè)計模式之道

    在軟件開發(fā)中,我們經(jīng)常需要創(chuàng)建和復(fù)制對象。然而,有時候直接創(chuàng)建對象可能會導(dǎo)致性能下降或代碼重復(fù)。為了解決這些問題,原型模式應(yīng)運而生。而使用原型管理器(Prototype Manager)來集中管理原型對象可以進一步提高靈活性和可維護性。本文將詳細介紹原型管理器的用

    2024年02月07日
    瀏覽(22)
  • [設(shè)計模式 Go實現(xiàn)] 結(jié)構(gòu)型~享元模式

    享元模式從對象中剝離出不發(fā)生改變且多個實例需要的重復(fù)數(shù)據(jù),獨立出一個享元,使多個對象共享,從而節(jié)省內(nèi)存以及減少對象數(shù)量。 flyweight.go flyweight_test.go

    2024年01月16日
    瀏覽(30)
  • JAVA設(shè)計模式----原型設(shè)計模式

    JAVA設(shè)計模式----原型設(shè)計模式

    定義 :用原型實例指定創(chuàng)建對象的種類,并通過拷貝這些原型創(chuàng)建新的對象。 類型 :創(chuàng)建類模式 類圖 : 原型模式主要用于對象的復(fù)制,它的核心是就是類圖中的原型類Prototype。Prototype類需要具備以下兩個條件: 實現(xiàn)Cloneable接口。在java語言有一個Cloneable接口,它的作用只

    2024年02月13日
    瀏覽(27)
  • 設(shè)計模式——原型模式

    ? ? ? ? 原型模式就是有時我們需要多個類的實例,但是一個個創(chuàng)建,然后初始化,這樣太麻煩了,此時可以使用克隆,來創(chuàng)建出克隆對象,就能大大的提高效率。具體就是要讓此類實現(xiàn)Cloneable接口,然后重寫Object類中的clone()方法。 ? ? ? ? 具體實現(xiàn)就是克隆了,前面都有

    2024年02月14日
    瀏覽(23)
  • 設(shè)計模式-原型模式

    設(shè)計模式-原型模式

    目錄 一、傳統(tǒng)方式 二、原型模式 ?三、淺拷貝和深拷貝 克隆羊問題: 現(xiàn)在有一只羊tom,姓名為: tom,年齡為: 1,顏色為: 白色,請編寫程序創(chuàng)建和tom羊?qū)傩酝耆嗤?0只羊。 傳統(tǒng)的方式的優(yōu)缺點: 簡單易操作。優(yōu)點是比較好理解。 在創(chuàng)建新的對象時,總是需要重新獲取原

    2024年02月16日
    瀏覽(23)
  • 設(shè)計模式(6)原型模式

    設(shè)計模式(6)原型模式

    一、介紹 Java中自帶的原型模式是clone()方法。該方法是Object的方法,native類型。他的作用就是將對象的在內(nèi)存的那一塊內(nèi)存數(shù)據(jù)一字不差地再復(fù)制一個。我們寫簡單類的時候只需要實現(xiàn)Cloneable接口,然后調(diào)用Object::clone方法就可實現(xiàn)克隆功能。這樣實現(xiàn)的方式是淺拷貝。 ?1、

    2024年02月12日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包