1. 程式人生 > 程式設計 >C# 動態呼叫WebService的示例

C# 動態呼叫WebService的示例


裝飾器模式(Decorator Pattern)允許向一個現有的物件新增新的功能,同時又不改變其結構。這種型別的設計模式屬於結構型模式,它是作為現有的類的一個包裝。

這種模式建立了一個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能

關鍵程式碼:1、Component 類充當抽象角色,不應該具體實現。 2、修飾類引用和繼承 Component 類,具體擴充套件類重寫父類方法。

優點:裝飾類和被裝飾類可以獨立發展,不會相互耦合,裝飾模式是繼承的一個替代模式,裝飾模式可以動態擴充套件一個實現類的功能。

缺點:多層裝飾比較複雜。

使用場景:1、擴充套件一個類的功能。 2、動態增加功能,動態撤銷。

注意事項:可代替繼承。



1
- 最簡單的裝飾器 2 3 ``` python 4 def deco(func): 5 ...: def inner(*args, **kwargs): 6 ...: return func(*args, **kwargs) 7 ...: return inner 8 9 ``` 10 11 - 帶引數的裝飾器 12 13 ``` python 14 def timer(n): 15 ...: def wrapper(func):
16 ...: def inner(*args, **kwargs): 17 ...: import time 18 ...: start = time.time() 19 ...: result = func(*args, **kwargs) 20 ...: end = time.time() 21 ...: print(f'花費時長: {end - start}') 22 ...: return
result 23 ...: return inner 24 ...: return wrapper 25 26 ``` 27 28 - 類裝飾器 29 30 ``` python 31 class Deco: 32 def __init__(self, func): 33 self.func = func 34 35 def __call__(self, *args, **kwargs): 36 return func(*args, **kwargs) 37 ``` 38 39 - 帶引數的類裝飾器 40 41 - ``` python 42 class Timer: 43 ...: def __init__(self, n): 44 ...: self.n = n 45 ...: def __call__(self, func): 46 ...: def inner(*args, **kwargs): 47 ...: start = time.time() 48 ...: result = func(*args, **kwargs) 49 ...: end = time.time() 50 ...: print(f'耗時{end - start}') 51 ...: return result 52 ...: return inner 53 54 ```