委託的一般使用

2022-08-01 19:15:13 字數 2586 閱讀 2730

有這麼一家廠家,做披薩和玩具車兩種product,並且給他們的產品裝在不同的包裝盒box裡,我們通過委託的方式給他們的產品裝上包裝盒。

產品類

class product

}

class box

}

包裝車間類

這裡多說一句,包裝車間類裡有包裝產品方法warpproduct(),這個方法的引數是委託型別的變數getporduct,

意味著我們要先例項化委託(用委託變數「引用」這個例項)再傳入這個委託型別的變數

class warpfactory

}

這個委託的返回型別是product,則返回型別是product型別的物件

產品工廠類

class productfactory

public product maketoycar()

}

主函式類
class program

}

先建立funcpizza 委託,封裝了makepizza這個方法,

warpproduct類的warpproduct方法中

product product = getporduct.invoke();
呼叫了funcpizza委託,

就跳轉到productfactory類中makepizza這個方法裡(間接呼叫)

makepizza方法建立了乙個product型別的pizza物件

呼叫完成後會返回間接呼叫的起點處

product product = getporduct.invoke();
並且通過委託拿到乙個product型別的物件(pizza),並且

box.product = product;
這個物件(pizza)就傳入了box物件,在主函式中這個box又被賦值給對應的box型別物件(如box類的pizzabox例項)

就完成了對產品的包裝。

結果:

這就是我們的模板方法,

邏輯在上面已經說明。

可以修改的邏輯是委託的呼叫getporduct.invoke(),傳進來的委託封裝的什麼方法,在這裡可以得到這個方法產出的產品。

這樣寫的好處是,我們只需要擴充套件產品類,而不需要動其他任何地方,最大限度的實現了**的重複使用。

**方法是通過委託型別的引數傳進主呼叫方法的乙個被調入方法,

主呼叫方法可以根據自己的邏輯來決定呼叫還是不呼叫這個方法。

又叫好萊塢方法:主辦方讓面試的求職者回去等**。

總結一下就是:方法作為引數,一定條件觸發後,呼叫這個方法

舉例說明:

我們先對我們之前的產品類進行改造,加入price屬性。

產品類

class product

public double price

}

然後新增乙個logger類,來記錄執行狀態,log方法來記錄狀態沒有返回值,這裡記錄的是建立時間

logger類

class logger

',created at .",product.name, datetime.utcnow, product.price);有時區}}

我們把log方法,以**方法的形式傳入我們的模板方法裡,

對於沒有返回值的方法(log),我們用action委託。

action委託可以接收型別引數。

當產品**》50的時候我們就呼叫log方法。

包裝車間類

class warpfactory

return box;}}

action這個委託沒有返回值,

要求委託的方法必須是無返回值void,引數型別必須是product

因此寫成logcallback.invoke(product);logger類的log()的確沒有返回值,例項product的型別的是product。

修改一下產品工廠類,給每個產品賦價值

產品工廠類

class productfactory

public product maketoycar()

}

回到主方法裡,例項化logger類的例項為logger取得其方法並以之建立委託log,並且傳入模板方法。

主函式

class program

}

結果:

委託使用注意事項:

IO 的一般使用原則

1 是檔案 fileinputstream,fileoutputstream,位元組流 filereader,filewriter 字元 2 是 byte bytearrayinputstream,bytearrayoutputstream 位元組流 3 是 char chararrayreader...

泛型的一般使用

泛型類 package com.generics public class genericsclass public void setelement e element public genericsclass public genericsclass e element public static...

const一般如何使用

c 基礎知識和清晰的頭腦 char greeting hello char p greeting non const pointer,non const data const char p greeting non const pointer,const data char const p gree...