委託的訂閱發布模式

2021-06-01 06:45:37 字數 2188 閱讀 2470

委託的訂閱發布模式

delegate這個關鍵字,在c#裡翻譯成委託,其英文原意就是**,委託的意思。想想生活中委託的例項。比如生產香皂的公司,它可以把銷售的業務交給**商,而不是自己與終端使用者打交道。

我們把生產香皂的公司寫成類 productclass,負責銷售的**商寫成salesclass,生產者生產好產品以後,由倉庫的人通知銷售**商拿貨,最後**商銷售給終端使用者(方法salsetouser();)

到這裡,我們已經建立了兩個類 productclass和salesclass,而負責告訴**商過來拿貨去賣的倉庫人員?就是我們的重點:委託。我們把他定義為delegate getproducttosalehandler()。

請看**示例:

delegate voidgetproducttosalehandler(object products);//生產商負責通知**商的部門,倉庫。

public classproductclass

getproducttosalehandlergetproducttosalehandler;//

public object  product()//生產產品的類

……//n多**,表示產品生產完成,生產好的產品叫products            

public saletouser(object products)

getproducttosalehandler(products)//生產好以後,通知**商來拿貨去賣

public classsalesclass

public salestouser(object products)

……//n多**,表示賣給使用者了

於是我們在實際生活中發生了這樣一幕:

class program

public static void main()

productclassproductclass = new productclass();

salesclass salesclass =new salesclass();

productclass. getproducttosalehandler+=salesclass. salestouser;

//注意這裡,通知**的動作。

object products = productclass.product();

//生產好產品

productclass.sale(products);

通知**商去賣。

然而,我們通常是有多個**商的,於是我們可以這樣寫。

class program

public static void main()

productclassproductclass = new productclass();

salesclass salesclassa =new salesclass();

salesclass salesclassb = new salesclass();

salesclass salesclassb = new salesclass();

productclass. getproducttosalehandler+=salesclassa. salestouser;

productclass. getproducttosalehandler+= salesclassb. salestouser;

productclass. getproducttosalehandler+=salesclassc. salestouser;

//產品生產好以後,通知a,b,c三個**商去賣。

object products =productclass.product();

//生產好產品

productclass.sale(products);

通知**商去賣。

接下來,談談,委託人發布訂閱模式,應該在什麼場景下使用。

對於我們上面的例子,productclass是發布者,salsesclass是訂閱者。如果發布者不願意去做,或者沒有能力去做的事。而訂閱者只負責接收發布者的資訊,然後去完成自己的任務。且訂閱者的行為方式有多個,且可能會變化。

附件是源**,實現的功能是:列印條碼。

邏輯是:列印的條碼需要根據使用者配置自由生成,比如,使用者的條碼可以由 版本號+銷售**+機型+……組成,但有的使用者可能會配置成 版本號+生產**+車間識別碼+……

而版本號,生產**這些資料,是需要根據使用者輸入的條件,去資料庫中查詢解析的。

用委託實現發布 訂閱

cat類中包含乙個事件,當cat狀態發生改變時,觸發該事件。事件是一種特殊的委託,關鍵字是event。與委託的不同之處在於 事件不能在類的外部觸發,只能在類的內部觸發。class cat public void catcoming 發布 mouse類需要實時關注cat的狀態,從而執行自己的動作。所以...

發布 訂閱模式

發布 訂閱模式又叫觀察者模式,它定義物件間的一種一對多的關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都將得到通知。在js中,我們一般用事件模型來替代傳統的發布 訂閱模式。實現 varpubsub function p 訂閱 p.subscribe function flag,fn 發布 p....

發布訂閱模式

不同的語言,相同的模式。最近在關注設計模式的知識,發布訂閱模式其實是物件間一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴與它的物件都將得到狀態改變的通知。作用 1 廣泛應用於非同步程式設計中 2 物件間鬆散耦合的編寫 自定義事件 let corp 定義乙個公司物件 這裡放乙個列表來緩衝回掉函...