C 設計模式 裝飾器模式

2021-09-26 09:23:14 字數 1479 閱讀 3262

裝飾器模式,顧名思義就是對乙個主體進行修飾。

原理就是用乙個新的類去包含乙個舊的類,在新的類中先呼叫舊的類的方法,再呼叫新的類中新新增的方法。這樣就實現了鏈式呼叫。然後可以不斷的新增新的修飾類去修飾。

為了能使新的類(裝飾類)能夠包含舊的類(主體類或者已經經過修飾的修飾類),就需要統一基類,所以不論是主體類還是修飾類都需要繼承同乙個基類。

用**來舉例:

1.定義2個主體類,man和women,都繼承與body這乙個基類。body中的print方法是最關鍵的,整個鏈式方法的呼叫全是通過這個print方法來實現的。

public abstract class body

public class man : body

}public class woman : body

}

2.定義裝飾抽象類

public abstract class decorator : body

這個抽象類的作用是可以簡化很多**,可以將很多不需要裝飾類修改的方法可以在這個抽象類中完成,而不需要再每個裝飾類都寫一樣的方法

3.定義裝飾類

public class clothes : decorator

public override void print()

}public class shoes : decorator

public override void print()

}public class pants : decorator

public override void print()

}

可以看到,每乙個裝飾類中的print方法都是先呼叫body的print方法,然後再呼叫自己的方法。就基本實現了鏈式呼叫。

呼叫

class program

}

結果

還可以採用另外一種方式來定義裝飾器抽象類和裝飾類。

2.1裝飾抽象類

public abstract class decorator : body

public override void print()

}

3.1裝飾類

public class clothes : decorator

public override void print()

}public class shoes : decorator

public override void print()

}public class pants : decorator

public override void print()

}

個人比較傾向第一種模

c 設計模式 裝飾器模式

裝飾器和被裝飾的物件必須有完全一致的方法名。只是在裝飾器的方法中會呼叫被裝飾物件的同名方法 如果裝飾器和被裝飾的物件方法名不一致,那麼將導致裝飾之後的結果不能再次被另外乙個裝飾器裝飾 因為方法名已經變了 base class 裝飾器模式的基類,被裝飾物件 元件和裝飾器模板都需要繼承自基類 class...

C 設計模式 裝飾器模式

裝飾器模式簡單來說就是通過乙個裝飾器,不斷的去增強基類的現有功能,而不是去擴充子類。舉個例子 還是原來的汽車例子,有寶馬bwm和奧迪audi兩個車 class car class bwm public car class audi public car 如果我們想給兩種車上藍芽,無疑我們能夠通過增加...

設計模式 裝飾器模式 C 實現

裝飾器模式 動態的給乙個物件新增一些額外的職責,而不是給整個類新增一些功能。場景 1.以動態透明的方式給單個物件新增職責 2.不採用子類的方式進行擴充。裝飾器模式更加靈活的向物件新增職責,可以新增和分離方法,用裝飾在執行時刻增加和刪除職責。裝飾物件的介面和它所裝飾的物件的介面是一致的。裝飾模式採用把...