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

《golang設(shè)計(jì)模式》第三部分·行為型模式-02-命令模式(Command)

這篇具有很好參考價(jià)值的文章主要介紹了《golang設(shè)計(jì)模式》第三部分·行為型模式-02-命令模式(Command)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1. 概述

命令模式(Command)將類的業(yè)務(wù)行為以對(duì)象的方式封裝,以便實(shí)現(xiàn)行為的參數(shù)化、撤銷或重做等需求。

  • 非命令模式的困惑:
    類的行為在運(yùn)行時(shí)是以實(shí)例方法的形式調(diào)用的,當(dāng)方法執(zhí)行完畢并返回后,方法棧將會(huì)消除;方法的運(yùn)行狀態(tài)(主要指局部變量)保存在棧幀中,它會(huì)隨著方法棧的銷毀而丟失。當(dāng)方法的運(yùn)行狀態(tài)丟失時(shí),撤銷、重做等類似操作就很難順利實(shí)現(xiàn)。
  • 命令模式的優(yōu)勢(shì):
    命令模式將目標(biāo)類的業(yè)務(wù)行為分離出去,并用單獨(dú)的對(duì)象類(稱為命令類)封裝。在程序運(yùn)行時(shí),被分離的業(yè)務(wù)行為作為一個(gè)獨(dú)立的對(duì)象存在,可以被存儲(chǔ)或參數(shù)化(作為參數(shù)在不同對(duì)象間傳遞),為實(shí)現(xiàn)該行為的撤銷、重做等提供支持。

1.1 角色

  • Command(抽象命令):一般定義為接口,用來(lái)定義執(zhí)行的命令。
  • ConcreteCommand(具體命令):通常會(huì)持有接收者對(duì)象,并調(diào)用接收者對(duì)象的相應(yīng)功能來(lái)完成命令要執(zhí)行的操作。
  • Receiver(接收者):真正執(zhí)行命令的對(duì)象。任何類都可能成為接收者,只要它能夠?qū)崿F(xiàn)命令要求實(shí)現(xiàn)的相應(yīng)功能。
  • Invoker(調(diào)用者):要求命令對(duì)象執(zhí)行請(qǐng)求,通常會(huì)持有命令對(duì)象,可以持有很多的命令對(duì)象。這個(gè)是客戶端真正觸發(fā)命令并要求命令執(zhí)行相應(yīng)操作的地方,也就是說(shuō)相當(dāng)于使用命令對(duì)象的入口。
  • Client:創(chuàng)建具體的命令對(duì)象,并且設(shè)置命令對(duì)象的接收者。

1.2 類圖

2. 代碼示例

2.1 設(shè)計(jì)

  • 定義一個(gè)抽象命令Command
  • 定義兩個(gè)具體命令StartStop
    • 它實(shí)現(xiàn)了抽象命令Command
    • 它繼承了接收者Service
  • 定義一個(gè)接收者Service
    • 它有Start()Stop()兩個(gè)方法分別對(duì)應(yīng)它的啟動(dòng)和停止操作
  • 定義一個(gè)調(diào)用者
    • 它是Command的聚合
    • 它的AddCommand()方法將Command加入調(diào)用者
    • 它的Option()方法執(zhí)行了加入它的命令
  • 調(diào)用
    • 實(shí)例化一個(gè)接收者
    • 實(shí)例化兩個(gè)具體命令
    • 實(shí)例化一個(gè)執(zhí)行者,各命令加入執(zhí)行者
    • 執(zhí)行執(zhí)行者的Option()方法
    • 驗(yàn)證接收者狀態(tài)

2.2 代碼

  • 代碼
package main

import "fmt"

// 創(chuàng)建抽象命令
type Command interface {
	execute()
}

// 創(chuàng)建具體命令start
type Start struct {
	Status  bool
	Service *Service
}

func (s *Start) execute() {
	err := s.Service.start()
	if err != nil {
		s.Status = true
	}
	s.Status = false
}

// 定義具體命令Stop
type Stop struct {
	Status  bool
	Service *Service
}

func (s *Stop) execute() {
	err := s.Service.stop()
	if err != nil {
		s.Status = true
	}
	s.Status = false
}

// 定義接收者
type Service struct {
	status string
}

func (s *Service) start() (err error) {
	fmt.Println("執(zhí)行啟動(dòng)操作") //假裝執(zhí)行了操作,實(shí)際操作中如果有錯(cuò)這里會(huì)拋出
	s.status = "Running"
	return nil
}

func (s *Service) stop() (err error) {
	fmt.Println("執(zhí)行停止操作") //假裝執(zhí)行了停止,實(shí)際操作中如果有錯(cuò)這里會(huì)拋出
	s.status = "Exited"
	return nil
}

func (s *Service) GetStatus() {
	fmt.Printf("服務(wù)狀態(tài):%+v", s.status)
}

// 調(diào)用者
type Invoker struct {
	commands []Command
}

func (i *Invoker) AddCommand(command ...Command) {
	i.commands = append(i.commands, command...)

}

func (i *Invoker) option() {
	for _, command := range i.commands {
		command.execute()
	}
}

func main() {
	//實(shí)例化一個(gè)接收者
	myService := &Service{}

	//實(shí)例化一個(gè)具體命令
	start := &Start{
		Service: myService,
	}
	//實(shí)例化另一個(gè)具體命令
	stop := &Stop{
		Service: myService,
	}
	//實(shí)例化一個(gè)調(diào)用者
	invoker := &Invoker{}
	//將剛才實(shí)例化的命令加入調(diào)用者
	invoker.AddCommand(stop, start)
	//執(zhí)行操作
	invoker.option()

	//驗(yàn)證接受者狀態(tài)
	myService.GetStatus()
}
  • 輸出
執(zhí)行停止操作
執(zhí)行啟動(dòng)操作     
服務(wù)狀態(tài):Running

2.3 類圖


《golang設(shè)計(jì)模式》第三部分·行為型模式-02-命令模式(Command),架構(gòu)設(shè)計(jì),golang,設(shè)計(jì)模式,命令模式,command,行為模式,架構(gòu)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-729552.html

到了這里,關(guān)于《golang設(shè)計(jì)模式》第三部分·行為型模式-02-命令模式(Command)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 《golang設(shè)計(jì)模式》第二部分·結(jié)構(gòu)型模式-02-橋接模式(Bridge)

    《golang設(shè)計(jì)模式》第二部分·結(jié)構(gòu)型模式-02-橋接模式(Bridge)

    橋(Bridge)使用組合關(guān)系將代碼的實(shí)現(xiàn)層和抽象層分離,讓實(shí)現(xiàn)層與抽象層代碼可以分別自由變化。 例如 客戶端調(diào)用橋接接口實(shí)現(xiàn)原有功能和擴(kuò)展功能的組合 Implementor(實(shí)施者): 具體實(shí)施者的抽象,可以是一個(gè)接口。 Concrete Implementor(具體實(shí)施者): 可以理解為擴(kuò)展之前

    2024年02月12日
    瀏覽(22)
  • 《golang設(shè)計(jì)模式》第一部分·創(chuàng)建型模式-02-原型模式(Prototype)

    《golang設(shè)計(jì)模式》第一部分·創(chuàng)建型模式-02-原型模式(Prototype)

    用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象 Prototype(抽象原型類):它是聲明克隆方法的接口,或所有具體原型類的公共父類 它可以是抽象類也可以是接口,甚至還可以是具體實(shí)現(xiàn)類。 ConcretePrototype(具體原型類):它實(shí)現(xiàn)在抽象原型類中聲明的

    2024年02月14日
    瀏覽(27)
  • 設(shè)計(jì)模式之命令模式【行為型模式】

    設(shè)計(jì)模式之命令模式【行為型模式】

    提示:文章寫(xiě)完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 學(xué)習(xí)的最大理由是想擺脫平庸,早一天就多一份人生的精彩;遲一天就多一天平庸的困擾。各位小伙伴,如果您: 想系統(tǒng)/深入學(xué)習(xí)某技術(shù)知識(shí)點(diǎn)… 一個(gè)人摸索學(xué)習(xí)很難堅(jiān)持,想組團(tuán)高效學(xué)習(xí)… 想寫(xiě)博

    2024年02月01日
    瀏覽(24)
  • 設(shè)計(jì)模式—行為型模式之命令模式

    設(shè)計(jì)模式—行為型模式之命令模式

    命令(Command)模式:將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,使發(fā)出請(qǐng)求的責(zé)任和執(zhí)行請(qǐng)求的責(zé)任分割開(kāi)。這樣兩者之間通過(guò)命令對(duì)象進(jìn)行溝通,這樣方便將命令對(duì)象進(jìn)行儲(chǔ)存、傳遞、調(diào)用、增加與管理。 命令模式包含以下主要角色。 抽象命令類(Command)角色:聲明執(zhí)行命令的接口,

    2024年01月25日
    瀏覽(22)
  • 笨蛋學(xué)設(shè)計(jì)模式行為型模式-命令模式【19】

    8.6.1概念 ? 命令模式允許將請(qǐng)求封裝成一個(gè)對(duì)象(命令對(duì)象,包含執(zhí)行操作所需地所有信息),并將命令對(duì)象按照一定的順序存儲(chǔ)在隊(duì)列中,然后再逐一調(diào)用執(zhí)行,這些命令可以支持反向操作,進(jìn)行撤銷和重做。這樣發(fā)送者就只需要觸發(fā)命令就可以完成操作,不需要知道接受者

    2024年01月23日
    瀏覽(24)
  • 設(shè)計(jì)模式(016)行為型之命令模式

    ????????命令模式,它將請(qǐng)求封裝成一個(gè)對(duì)象,從而允許客戶端參數(shù)化操作隊(duì)列、記錄請(qǐng)求日志、支持撤銷操作等。在命令模式中,有四個(gè)核心角色:命令接口(Command)、具體命令(ConcreteCommand)、調(diào)用者(Invoker)、接收者(Receiver)。 ① 命令接口(Command) :聲明了執(zhí)

    2024年04月11日
    瀏覽(23)
  • 【設(shè)計(jì)模式】第16節(jié):行為型模式之“命令模式”

    【設(shè)計(jì)模式】第16節(jié):行為型模式之“命令模式”

    命令模式:將請(qǐng)求(命令)封裝為一個(gè)對(duì)象,這樣可以使用不同的請(qǐng)求參數(shù)化其他對(duì)象(將不同請(qǐng)求依賴注入到其他對(duì)象),并且能夠支持請(qǐng)求(命令)的排隊(duì)執(zhí)行、記錄日志、撤銷等(附加控制)功能。 動(dòng)作封裝 解耦發(fā)送者跟接受者 可擴(kuò)展性 簡(jiǎn)化和集中錯(cuò)誤處理 支持撤

    2024年02月07日
    瀏覽(32)
  • 【Java 設(shè)計(jì)模式】行為型之命令模式

    命令模式(Command Pattern)是一種行為型設(shè)計(jì)模式,用于將請(qǐng)求封裝為對(duì)象,使得可以參數(shù)化客戶端對(duì)象,并且能夠排隊(duì)、記錄請(qǐng)求,以及支持撤銷操作。在本文中,我們將深入研究Java中命令模式的定義、結(jié)構(gòu)、使用場(chǎng)景以及如何在實(shí)際開(kāi)發(fā)中應(yīng)用。 命令模式是一種行為型設(shè)

    2024年01月23日
    瀏覽(27)
  • 【設(shè)計(jì)模式|行為型】命令模式(Command Pattern)

    命令模式(Command Pattern)是一種行為設(shè)計(jì)模式,它將請(qǐng)求封裝為一個(gè)對(duì)象,以便在不同的請(qǐng)求者和接收者之間進(jìn)行解耦、參數(shù)化和操作的隊(duì)列化。命令模式允許你將具體的請(qǐng)求封裝為對(duì)象,這些對(duì)象之間彼此獨(dú)立,并且可以用不同的請(qǐng)求對(duì)客戶端進(jìn)行參數(shù)化。 結(jié)構(gòu) 命令接口

    2024年02月15日
    瀏覽(27)
  • 掌握設(shè)計(jì)模式:深入了解命令模式的優(yōu)雅調(diào)度與行為解耦

    掌握設(shè)計(jì)模式:深入了解命令模式的優(yōu)雅調(diào)度與行為解耦

    命令模式是一種行為設(shè)計(jì)模式,其目的是將請(qǐng)求發(fā)送者和接收者解耦,從而允許發(fā)送者發(fā)送請(qǐng)求,而無(wú)需知道請(qǐng)求的具體處理方式。在命令模式中,請(qǐng)求被封裝為一個(gè)對(duì)象,這個(gè)對(duì)象包含了執(zhí)行請(qǐng)求所需的所有信息,包括調(diào)用方法、參數(shù)等。這樣,請(qǐng)求的發(fā)送者只需知道如何

    2024年01月25日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包