国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript設計模式之裝飾者模式介紹

2024-05-06 16:13:02
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了JavaScript設計模式之裝飾者模式介紹,通一個類來動態的對另一個類的功能對象進行前或后的修飾,給它輔加一些額外的功能; 這是對一個類對象功能的裝飾,裝飾的類跟被裝飾的類,要求擁有相同的訪問接口方法(功能),需要的朋友可以參考下
 
 

裝飾者模式說明

 

說明:通一個類來動態的對另一個類的功能對象進行前或后的修飾,給它輔加一些額外的功能; 這是對一個類對象功能的裝飾,裝飾的類跟被裝飾的類,要求擁有相同的訪問接口方法(功能),這在動態面向對象類里,一般以實現同一個接口(interface)來約束實現;裝飾類的要有對被裝飾類的引用,用于在裝飾類的相應方法,調用相應被裝飾類的方法,然后對其進行修飾;

 

場景舉例:

 

1>. 比如我們生活中的穿衣服, 一件襯衣,一件西裝外套,一條褲子,一條領帶,一雙漂亮的皮鞋; 每多穿一件,都是對前面一件或全身的裝飾;

2>. 比如我們有個類下的功能方法,可能用于寫日志,可能用于用戶登陸這樣的功能,也許寫入日志前需要獲取當前操作者信息,或是登錄成功后,寫入一條日志;寫入日志之前的額外操作,它的總體來說也還是一個寫日志的目的;登孫成功后寫日志,它總體上也是一個登錄過程的操作信息;

因此裝飾者模式用于實現,兩者相似操作的一種場景;就是裝飾者對被裝飾者功能對象的擴展,本質還是原方法相同的功能范圍;

 

實例源碼

 

1. 被裝飾者類

 

復制代碼代碼如下:

function Wear() {
    
}

 

Wear.prototype.Shirt = function() {
    //穿了件襯衫
  console.log('穿上襯衫');
}

 

 

2. 裝飾者類

 

 

復制代碼代碼如下:

function Decorator(wear) {
    this.wear = wear;
}

 

Decorator.prototype.Shirt = function() {
    this.wear.Shirt();
    //穿了件襯衫后,我又加上了領帶
}

 

 

3. 使用方法

 

 

復制代碼代碼如下:

var wear = new Wear();
var decorator = new Decorator(wear);
decorator.Shirt();

 

 

這樣就實現了對 Wear 穿襯衫這個功能對象的動態擴展裝飾,你也不必知道原被裝飾方法是如何執行,只要知道它的功能是什么就可以,然后知道我們要對其輔加的額外功能是什么就可以;

 

其他說明

 

裝飾者模式,真正提現了面向對象方法的:對擴展開放,對修改關閉的原則;所有想要的功能方法,都是在沒有修改[被裝飾類Wear]在擴展[裝飾者這個類Decorator]的情況下進行的;

裝飾者模式的一個主要特點,就是裝飾者對被裝飾者的引用,以實現對被裝飾者的無修改裝飾;

模擬下:先穿襯衫,再穿領帶,再穿西裝的場景: 上面的被裝飾者不變了:

 

2. 裝飾者類:

 

 

復制代碼代碼如下:

function Decorator(wear) {
    this.wear = wear;
}
Decorator.prototype.Shirt = function() {
    this.wear.Shirt(); //這里只穿襯衫;
}

 

 

3. 創建類似繼承 Decorator 子類的 穿領帶類與穿西裝類

 

復制代碼代碼如下:

function Decorator_Tie(decorator) {
    this.decorator = decorator;
}    
Decorator_Tie.prototype.Shirt = function() {
    this.decorator.Shirt(); //穿上襯衫
    console.log('再戴上領帶');
}

 

function Decorator_Western (decorator) {
    this.decorator =  decorator;
}
Decorator_Western.prototype.Shirt = function() {
    this.decorator.Shirt();
    console.log('再穿上西裝');
}

 

 

使用方法:

 

復制代碼代碼如下:

//先穿上襯衫
var wear = new Wear();
var decorator = new Decorator(wear);
//decorator.Shirt();
//再戴上領帶
var tie = new Decorator_Tie(decorator);
//tie.Shirt();
//再穿上西裝
var western = new Decorator_Western(tie);
western.Shirt();

 

 

這就是一個穿衣服裝飾的模擬例子;


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 阿巴嘎旗| 乌什县| 进贤县| 扶沟县| 汉寿县| 楚雄市| 武胜县| 富裕县| 日喀则市| 灯塔市| 漳平市| 普宁市| 云龙县| 玉龙| 巴林右旗| 尼玛县| 化州市| 鸡东县| 称多县| 磴口县| 高州市| 渝北区| 石景山区| 丘北县| 清水县| 亳州市| 大厂| 安泽县| 海淀区| 泸溪县| 曲松县| 襄樊市| 田阳县| 怀安县| 仁怀市| 衡水市| 延寿县| 颍上县| 清丰县| 祁东县| 格尔木市|