設計模式 裝飾器模式

2021-10-23 06:27:12 字數 3257 閱讀 6057

python實現

在不改變源**的基礎上對乙個物件的功能進行增強

可以對乙個物件裝飾多個功能

1.實現和原物件一樣的介面

2.重寫需要增強的方法

原始未增強的**

介面

public

inte***ce

myinter

原始類

public

class

source

implements

myinter

}

測試類

public

static

void

main

(string[

] args)

throws exception

對print方法進行增強,將所有小寫字串改為大寫

即myinter source物件呼叫自身print方法時進行增強

1.print方法只屬於myinter型別

所以要增強就必須要增強類實現myinter介面

2.增強類要重寫print方法,這樣在呼叫myinter.print時,

就可以太子換狸貓,呼叫增強類的print方法

為了在增強類中執行原始類的print方法

必須將原始類作為增強類的屬性,在構造器中初始化

就可以在增強類中呼叫並對其進行增強

裝飾器1

public

class

decorate

implements

myinter

public

decorate

(myinter source)

@override

public

void

print

(string s)

}

裝飾器2

public

class

decorate2

implements

myinter

public

decorate2

(myinter source)

@override

public

void

print

(string s)

}

測試**

public

static

void

main

(string[

] args)

throws exception

servlet中的request.getparameter("username")

對於get請求的亂碼問題需要單獨對引數進行編碼與解碼

protected

throws servletexception, ioexception

這個時候就可以對其進行增強

在過濾器filter中攔截所有請求,在dofilter方法中進行呼叫增強類

自定義myrequest實現這個介面

2.重寫getparameter方法

public

class

myrequest

extends

//無參構造

//...

//對getparaameter增強

@override

public string getparameter

(string name)

catch

(unsupportedencodingexception e)

return parameter;

}}

增強後在filter中用myrequest替換(httpservletrequest
@override

public

void

dofilter

(servletrequest request, servletresponse response, filterchain chain)

throws ioexception, servletexception

使用裝飾器計算出**執行時間
def

function

(f):

definner

(*args,

**kwagrs)

: start = time.time(

)#目標方法執行前執行的**

ret = f(

*args,

**kwagrs)

#目標方法

end =time.time(

)- start#目標方法執行後執行的**

print

('程式執行時間為%.4f'

% end)

return ret #方法返回值

return inner

@function

defcode

(n):

for i in

range

(n):

print

(i)

code(

10000

)print

(code.__name__)

#inner

將函式裝飾器轉換為方法裝飾器
from django.utils.decorators import method_decorator

class

mytest

(object)

: @method_decorator(function)

defcode

(n):

for i in

range

(n):

print

(i)

設計模式 裝飾器模式

裝飾器模式 decorator pattern 允許向乙個現有的物件新增新的功能,同時又不改變其結構。這種型別的設計模式屬於結構型模式,它是作為現有的類的乙個包裝。這種模式建立了乙個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。public inte ce playe...

設計模式 裝飾器模式

裝飾者模式的應用場景 裝飾者模式 decorator pattern 是指在不改變原有物件的基礎之上,將功能附加到物件上,提供了比繼承更有彈性的替代方案 擴充套件原有物件的功能 屬於結構型模式。裝飾者模式在我們生活中應用也比較多如給煎餅加雞蛋 給蛋糕加上一些水果 給房子裝修等,為物件擴充套件一些額外...

設計模式 裝飾器模式

定義 裝飾模式可以動態的給乙個物件增加一些額外的功能 增強功能 相比於繼承,裝飾模式能對不支援繼承的類進行增強 並且比繼承更靈活,不需要生成大量的子類。角色 實現 public abstract class house public abstract void sleep public class ...