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

Go中的控制反轉(zhuǎn) IoC

這篇具有很好參考價值的文章主要介紹了Go中的控制反轉(zhuǎn) IoC。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

以嵌入組合的方式實現(xiàn)控制反轉(zhuǎn) IoC:

控制反轉(zhuǎn)是一種解耦思想,將原本耦合在業(yè)務(wù)邏輯中的控制邏輯單獨拆出來實現(xiàn),不再讓業(yè)務(wù)邏輯在處理業(yè)務(wù)的同時還要去實現(xiàn)控制邏輯,而是專注處理業(yè)務(wù)。在業(yè)務(wù)邏輯代碼中耦合進(jìn)控制邏輯,會導(dǎo)致在編寫業(yè)務(wù)邏輯時需要處理業(yè)務(wù)之外的事,而且控制邏輯耦合進(jìn)業(yè)務(wù)中,只適用于當(dāng)前業(yè)務(wù)邏輯,無法被復(fù)用。文章來源地址http://www.zghlxwxcb.cn/news/detail-838795.html

// 以嵌入組合的方式實現(xiàn)控制反轉(zhuǎn) IoC
package main

import (
	"errors"
	"fmt"
)

// 2.被要求:新增一 'undo 后悔' 功能。
// 3.解決辦法:定義單獨(通用的)控制邏輯,別的數(shù)據(jù)結(jié)構(gòu)也可能會用到
//   即:控制邏輯封裝在 Undo 中,業(yè)務(wù)邏輯 IntSet 只關(guān)心處理整型數(shù)據(jù)
type Undo []func() // 函數(shù)切片

func (undo *Undo) Add(fn func()) { //undo入棧
	*undo = append(*undo, fn)
}

func (undo *Undo) Undo() error {
	functions := *undo
	if len(functions) == 0 {
		return errors.New("No functions to undo")
	}
	index := len(functions) - 1
	if fn := functions[index]; fn != nil {
		fn()
		functions[index] = nil  // 垃圾回收
	}
	*undo = functions[:index] // undo出棧操作
	return nil
}

// ----------------------------------------------
type IntSet struct {
	data map[int]bool  // 1.原本的處理整形數(shù)據(jù)的結(jié)構(gòu)
	undo Undo // 3.解決辦法:并在此處嵌入一個 Undo 結(jié)構(gòu),間接實現(xiàn) undo 功能
}

func NewIntSet() IntSet {
	return IntSet{data: make(map[int]bool)}
}

func (set *IntSet) Add(x int) {
	// set.data[x] = true  //原來邏輯
	// 改為
	if !set.Contains(x) {
		set.data[x] = true
		set.undo.Add(func() { set.Delete(x) })
	} else {
		set.undo.Add(nil)
	}
}

func (set *IntSet) Delete(x int) {
	// delete(set.data, x) //原來邏輯
	//改為
	if set.Contains(x) {
		delete(set.data, x)
		set.undo.Add(func() { set.Add(x) })
	} else {
		set.undo.Add(nil)
	}
}

func (set *IntSet) Contains(x int) bool {
	return set.data[x]
}

// 3.新增
func (set *IntSet) Undo() error {
	return set.undo.Undo()
}

// ----------------------------------------------
func main() {
	a := NewIntSet()
	for i := 1; i < 11; i++ {
		a.Add(i)
	}
	fmt.Printf("%v\n", a) //map[1:true 2:true 3:true 4:true 5:true 6:true 7:true 8:true 9:true 10:true]
	fmt.Printf("%v\n", a.Contains(2))

	a.Delete(2)
	fmt.Printf("%v\n", a) //map[1:true 3:true 4:true 5:true 6:true 7:true 8:true 9:true 10:true]
	fmt.Printf("%v\n", a.Contains(2))

	a.Undo()
	fmt.Printf("%v\n", a) //map[1:true 2:true 3:true 4:true 5:true 6:true 7:true 8:true 9:true 10:true]
	fmt.Printf("%v\n", a.Contains(2))

	fmt.Printf("%v\n", a.Contains(4))
	a.Delete(4)
	fmt.Printf("%v\n", a) //map[1:true 2:true 3:true 5:true 6:true 7:true 8:true 9:true 10:true]
	fmt.Printf("%v\n", a.Contains(4))
	a.Delete(7)
	fmt.Printf("%v\n", a) //map[1:true 2:true 3:true 5:true 6:true 8:true 9:true 10:true]
	fmt.Printf("%v\n", a.Contains(7))

	a.Undo()
	fmt.Printf("%v\n", a) //map[1:true 2:true 3:true 5:true 6:true 7:true 8:true 9:true 10:true]
	fmt.Printf("%v\n", a.Contains(7))
	a.Undo()
	fmt.Printf("%v\n", a) //map[1:true 2:true 3:true 4:true 5:true 6:true 7:true 8:true 9:true 10:true]
	fmt.Printf("%v\n", a.Contains(4))
}

到了這里,關(guān)于Go中的控制反轉(zhuǎn) IoC的文章就介紹完了。如果您還想了解更多內(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ìn)行投訴反饋,一經(jīng)查實,立即刪除!

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

相關(guān)文章

  • IOC控制反轉(zhuǎn)--.net framework

    分層架構(gòu): 傳統(tǒng)工藝:會有依賴,上端全部展示細(xì)節(jié) 依賴于抽象:左邊依賴倒置,面向抽象 實現(xiàn)類繼承接口,實現(xiàn)類實現(xiàn)接口的方法 左邊抽象,右邊實現(xiàn)類 BaseBll.cs (ZhaoxiFramework.BLL) 調(diào)用 第三方工廠 IPhone.cs(ZhaoxiFramework.Interface) ObjectFactory.cs(ZhaoxiFramework.IOC.Project)

    2024年02月16日
    瀏覽(19)
  • 從依賴倒置原則到IOC控制反轉(zhuǎn)實現(xiàn)

    從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(zhuǎn)(Inversion of Control, IoC)再到依賴注入(Dependency Injection, DI)的演進(jìn)過程,我們可以理解為一種逐步抽象和解耦的設(shè)計思想。這種思想在C#等面向?qū)ο蟮木幊陶Z言中得到了廣泛的應(yīng)用。 首先,讓我們回顧一下依賴倒置原

    2024年04月24日
    瀏覽(26)
  • spring--Ioc控制反轉(zhuǎn)/DI依賴注入

    spring--Ioc控制反轉(zhuǎn)/DI依賴注入

    1.概念:在使用對象的時候,由主動的new轉(zhuǎn)換為外部提供對象,將對象創(chuàng)建的控制權(quán)交給外部,即控制反轉(zhuǎn) 2.spring提供了一個容器,稱為IOC容器,用來從當(dāng)ioc中的外部 3.被管理或者被創(chuàng)建的對象在ioc中被叫做bean 使用步驟 1.導(dǎo)入依賴 spring-context 依賴,用到xml文件就需導(dǎo)入 2.創(chuàng)建

    2024年02月12日
    瀏覽(21)
  • 12.控制反轉(zhuǎn)IOC與面向切面編程AOP

    目錄 一、IOC-控制反轉(zhuǎn)。 二、AOP-面向切面編程。 IOC(Inversion of Control)是控制反轉(zhuǎn)的縮寫,指的是將對象的創(chuàng)建過程和依賴關(guān)系的處理交給外部容器來實現(xiàn),從而實現(xiàn)對象之間的解耦。因此,IOC不是容器,是一種編程思想,將對象之間的依賴關(guān)系的處理從程序中轉(zhuǎn)移到容器(

    2023年04月09日
    瀏覽(23)
  • Spring系列篇--關(guān)于IOC【控制反轉(zhuǎn)】的詳解

    Spring系列篇--關(guān)于IOC【控制反轉(zhuǎn)】的詳解

    接下來看看由輝輝所寫的關(guān)于Spring的相關(guān)操作吧 目錄 ????Welcome Huihui\\\'s Code World ! !???? ?一.什么是Spring 二.Spring的特點 三.什么是IOC 場景模擬: 控制反轉(zhuǎn): 使用步驟 1 創(chuàng)建Maven的war項目然后配置web的相關(guān)依賴以及項目結(jié)構(gòu)的配置 2在pom.xml文件中配置Spring的依賴 3 在resourc

    2024年02月12日
    瀏覽(19)
  • 100天精通Golang(基礎(chǔ)入門篇)——第5天: Go語言中的數(shù)據(jù)類型學(xué)習(xí)

    100天精通Golang(基礎(chǔ)入門篇)——第5天: Go語言中的數(shù)據(jù)類型學(xué)習(xí)

    ?? 博主 libin9iOak帶您 Go to Golang Language.? ?? 個人主頁——libin9iOak的博客?? ?? 《面試題大全》 文章圖文并茂??生動形象??簡單易學(xué)!歡迎大家來踩踩~?? ?? 《IDEA開發(fā)秘籍》學(xué)會IDEA常用操作,工作效率翻倍~?? ?? 希望本文能夠給您帶來一定的幫助??文章粗淺,敬請批

    2024年02月08日
    瀏覽(34)
  • Go語言中的流程控制語句

    Go語言中的流程控制語句

    目錄 流程控制語句 if語句 if···else語句 switch語句 for循環(huán) break語句 continue語句 goto語句 在Go語言中,可以在if后面加上一段執(zhí)行語句,執(zhí)行語句也可以用作對if條件的判斷。它的語法格式為: a賦值為condition()方法的結(jié)果,然后讓a與nil進(jìn)行判斷,如果為true,那么會執(zhí)行代碼塊中

    2024年02月03日
    瀏覽(14)
  • .Net Core后端架構(gòu)實戰(zhàn)【3-介入IOC控制反轉(zhuǎn)】

    .Net Core后端架構(gòu)實戰(zhàn)【3-介入IOC控制反轉(zhuǎn)】

    摘要:基于.NET Core 7.0WebApi后端架構(gòu)實戰(zhàn)【2-介入IOC控制反轉(zhuǎn)】??2023/04/09, ASP.NET Core 7.0, VS2022 Dependency Injection,何為依賴注入?由容器動態(tài)的將對象依賴的資源注入到對象之中。假設(shè)容器在構(gòu)造對象A時,對象A的構(gòu)造依賴對象B、對象C、對象D這些參數(shù),容器會將這些依賴關(guān)系自

    2024年02月07日
    瀏覽(22)
  • CommunityToolkit.Mvvm8.1 IOC依賴注入控制反轉(zhuǎn)(5)

    ? 本系列文章導(dǎo)航 https://www.cnblogs.com/aierong/p/17300066.html https://github.com/aierong/WpfDemo (自我Demo地址) 希望提到的知識對您有所提示,同時歡迎交流和指正 作者:aierong 出處:https://www.cnblogs.com/aierong ? ? CommunityToolkit.Mvvm包不提供ioc功能,但是官方建議使用:Microsoft.Extensions.DependencyInject

    2023年04月14日
    瀏覽(26)
  • 深入理解 Spring IoC 和 DI:掌握控制反轉(zhuǎn)和依賴注入的精髓

    在本文中,我們將介紹 IoC (控制反轉(zhuǎn))和 DI (依賴注入)的概念,以及如何在 Spring 框架中實現(xiàn)它們。 控制反轉(zhuǎn)是軟件工程中的一個原則,它將對象或程序的某些部分的控制權(quán)轉(zhuǎn)移給容器或框架。我們最常在面向?qū)ο缶幊痰纳舷挛闹惺褂盟?與傳統(tǒng)編程相比,傳統(tǒng)編程中我

    2024年02月04日
    瀏覽(29)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包