日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

《设计模式》之 3 装饰者模式

發(fā)布時(shí)間:2023/12/15 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《设计模式》之 3 装饰者模式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

注意:本文內(nèi)容大部分參考自文章設(shè)計(jì)模式詳解——裝飾者模式_簡(jiǎn)書(shū)

1 裝飾者模式介紹

意圖:向一個(gè)現(xiàn)有的對(duì)象添加新的功能,同時(shí)又不改變其結(jié)構(gòu)。
裝飾者模式的類圖如下:

在裝飾模式中的角色有:

  • 抽象構(gòu)件(Component)角色:給出一個(gè)抽象接口,以規(guī)范準(zhǔn)備接收附加責(zé)任的對(duì)象。
  • 具體構(gòu)件(ConcreteComponent)角色:定義一個(gè)將要接收附加責(zé)任的類。
  • 裝飾(Decorator)角色:持有一個(gè)構(gòu)件(Component)對(duì)象的實(shí)例,并定義一個(gè)與抽象構(gòu)件接口一致的接口。
  • 具體裝飾(ConcreteDecorator)角色:負(fù)責(zé)給構(gòu)件對(duì)象“貼上”附加的責(zé)任。

抽象構(gòu)件角色

public interface Component {public void sampleOperation(); }

具體構(gòu)件角色

public class ConcreteComponent implements Component {@Overridepublic void sampleOperation() {// 寫(xiě)相關(guān)的業(yè)務(wù)代碼} }

裝飾角色

public class Decorator implements Component{private Component component;public Decorator(Component component){this.component = component;}@Overridepublic void sampleOperation() {// 委派給構(gòu)件component.sampleOperation();} }

具體裝飾角色

public class ConcreteDecoratorA extends Decorator {public ConcreteDecoratorA(Component component) {super(component);}@Overridepublic void sampleOperation() {// 寫(xiě)相關(guān)的業(yè)務(wù)代碼super.sampleOperation();// 寫(xiě)相關(guān)的業(yè)務(wù)代碼} }

2 裝飾者模式實(shí)例演示

齊天大圣的例子
孫悟空有七十二般變化,他的每一種變化都給他帶來(lái)一種附加的本領(lǐng)。他變成魚(yú)兒時(shí),就可以到水里游泳;他變成鳥(niǎo)兒時(shí),就可以在天上飛行。
本例中,Component的角色便由鼎鼎大名的齊天大圣扮演;ConcreteComponent的角色屬于大圣的本尊,就是猢猻本人;Decorator的角色由大圣的七十二變扮演。而ConcreteDecorator的角色便是魚(yú)兒、鳥(niǎo)兒等七十二般變化。

抽象構(gòu)件角色“齊天大圣”接口定義了一個(gè)move()方法,這是所有的具體構(gòu)件類和裝飾類必須實(shí)現(xiàn)的。

//大圣的尊號(hào) public interface TheGreatestSage {public void move(); }

具體構(gòu)件角色“大圣本尊”猢猻類

public class Monkey implements TheGreatestSage {@Overridepublic void move() {//代碼System.out.println("Monkey Move");} }

抽象裝飾角色“七十二變”

public class Change implements TheGreatestSage {private TheGreatestSage sage;public Change(TheGreatestSage sage){this.sage = sage;}@Overridepublic void move() {// 代碼sage.move();} }

具體裝飾角色“魚(yú)兒”

public class Fish extends Change {public Fish(TheGreatestSage sage) {super(sage);}@Overridepublic void move() {// 代碼System.out.println("Fish Move");} }

具體裝飾角色“鳥(niǎo)兒”

public class Bird extends Change {public Bird(TheGreatestSage sage) {super(sage);}@Overridepublic void move() {// 代碼System.out.println("Bird Move");} }

客戶端調(diào)用

public class Client {public static void main(String[] args) {TheGreatestSage sage = new Monkey();// 第一種寫(xiě)法 單層裝飾TheGreatestSage bird = new Bird(sage);TheGreatestSage fish = new Fish(bird);// 第二種寫(xiě)法 雙層裝飾//TheGreatestSage fish = new Fish(new Bird(sage));fish.move(); } }

“大圣本尊”是ConcreteComponent類,而“鳥(niǎo)兒”、“魚(yú)兒”是裝飾類。要裝飾的是“大圣本尊”,也即“猢猻”實(shí)例。
上面的例子中,第二種些方法:系統(tǒng)把大圣從一只猢猻裝飾成了一只鳥(niǎo)兒(把鳥(niǎo)兒的功能加到了猢猻身上),然后又把鳥(niǎo)兒裝飾成了一條魚(yú)兒(把魚(yú)兒的功能加到了猢猻+鳥(niǎo)兒身上,得到了猢猻+鳥(niǎo)兒+魚(yú)兒)。

如上圖所示,大圣的變化首先將鳥(niǎo)兒的功能附加到了猢猻身上,然后又將魚(yú)兒的功能附加到猢猻+鳥(niǎo)兒身上。

總結(jié)

以上是生活随笔為你收集整理的《设计模式》之 3 装饰者模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。