1. 程式人生 > 其它 >二叉樹(棧實現)

二叉樹(棧實現)

轉載自:https://www.cnblogs.com/xiaoyuanqujing/articles/11728016.html

1橋接模式

橋樑模式又叫橋接模式,定義如下:將抽象與實現解耦(注意此處的抽象和實現,並非抽象類和實現類的那種關係,而是一種角色的關係,這裡需要好好區分一下),可以使其獨立變化。在形如上例中,Pen只負責畫,但沒有形狀,它終究是不知道要畫什麼的,所以我們把它叫做抽象化角色;而Shape是具體的形狀,我們把它叫做實現化角色。抽象化角色和實現化角色是解耦的,這也就意味著,所謂的橋,就是抽象化角色的抽象類和實現化角色的抽象類之間的引用關係。

class DrawingAPI1:
    def draw_circle(self, x, y, radius):
        print("API1.circle at {} : {}  ,radius:{}".format(x, y, radius))


class DrawingAPI2:
    def draw_circle(self,x,y,radius):
        print("API2.cirle at {} : {}  ,radius:{}".format(x, y, radius))


class CircleShape:
    def __init__(self,x,y,radius,drawing_api):
        self._x = x
        self._y = y
        self._radius = radius
        self._drawing_api = drawing_api

    def draw(self):
        self._drawing_api.draw_circle(self._x,self._y,self._radius)

    def scale(self,pct):   # scale 規模
        self._radius *= pct   # pct 百分比


def main():
    shapes = (
        CircleShape(1,2,3,DrawingAPI1()),
        CircleShape(5,7,11,DrawingAPI2()),
    )  # 提供2個
    for shape in shapes:
        shape.scale(2.5)
        shape.draw()
main()
'''
API1.circle at 1 : 2  ,radius:7.5
API2.circle at 5 : 7  ,radius:27.5
'''

2橋樑模式的優點和應用場景
優點:
1、抽象角色與實現角色相分離,二者可以獨立設計,不受約束;
2、擴充套件性強:抽象角色和實現角色可以非常靈活地擴充套件。
應用場景:
1、不適用繼承或者原繼承關係中抽象類可能頻繁變動的情況,可以將原類進行拆分,拆成實現化角色和抽象化角色。例如本例中,若將形狀、粗細、繪畫樣式等屬於彙集在一個類中,一旦抽象類中有所變動,將造成巨大的風險;
2、重用性比較大的場景。比如開關控制邏輯的程式,開關就是抽象化角色,開關的形式有很多種,操作的實現化角色也有很多種,採用橋樑模式,(如當前例子)開關即可進行復用,整體會將設計的粒度減小。