91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用javascript中的裝飾模式

發布時間:2020-08-04 10:08:31 來源:億速云 閱讀:95 作者:小豬 欄目:web開發

這篇文章主要講解了如何使用javascript中的裝飾模式,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

介紹:裝飾模式可以在不改變一個對象本身功能的基礎上給對象增加額外的新行為。在現實生活中,這種情況也到處存在,例如一張照片,可以不改變照片本身,通過增加一個相框,使其具有防潮的功能。裝飾模式是一種用于替代繼承的技術,它使用對象之間的關聯關系來取代繼承關系。

定義:動態的給一個對象增加一些額外的職責,就增加對象功能來說,裝飾模式比生成子類實現更為靈活。裝飾模式是一種對象結構模型。

場景:我們現有一個Circle類用來畫一個圓,新的需求要求畫一個紅色的圓,又一個新的需求要求我們畫一個半徑20的圓,又一個新的需求要求我們畫一個紅色的,半徑20的圓。
如何設計才能讓我們的代碼來兼容這樣的需求呢?我們首先給Circle類包裝一個顏色的相框,這個相框用來改變圓的顏色。再給Circle類包裝一個大小的相框,這個相框用來改變圓的大小。通過不同的相框組合來達到想要的效果。

示例:

var Circle = function(){
  this.draw = function(){
    console.log('畫圓');
  };
}
 
var ColorDecorator = function(circle){
  this.circle = circle;
  this.draw = function(){
    this.circle.draw();
    setColor();
    return this.circle;
  }
  function setColor(){
    console.log('紅色');
  }
}
 
var RadiusDecorator = function(circle){
  this.circle = circle;
  this.draw = function(){
    this.circle.draw();
    setRadius();
  }
  function setRadius(){
    console.log('半徑:20px')
  }
}
 
var circle = new Circle();
 
var redCricle = new ColorDecorator(circle);
 
var radiusCricle = new RadiusDecorator(circle);
 
var radiusRedCircle = new RadiusDecorator(new ColorDecorator(circle));
 
//輸出:
circle.draw();  //畫圓
 
redCricle.draw(); //畫圓 紅色
 
radiusCricle.draw(); //畫圓 半徑:20px
 
radiusRedCircle.draw(); //畫圓 紅色 半徑:20px

以上就是裝飾模式的示例,比較好懂,在不改變Circle類基礎上進行擴展,通過包裝一層來實現新特性。降低了系統的耦合度。與繼承結構相比,裝飾模式大大減少了子類的個數,讓系統擴展起來更加方便,而且更容易維護。RadiusDecorator,ColorDecorator稱為裝飾類,他們的引入將大大簡化系統的設計,他也是裝飾模式的核心。

裝飾模式總結:

優點:
* 便于擴展一個對象的功能,裝飾模式比繼承更加具有靈活性,不會導致類的個數急劇增加。
* 可以通過一種動態的方式來擴展一個對象的功能。
* 可以對一個對象進行多次裝飾,通過不同的裝飾類組合,可以創造很多不同行為的組合,得到功能更強大的對象

缺點:
* 使用裝飾模式過程中會產生很多小對象,一定程度影響程序性能。
* 裝飾模式特別靈活,同時也意味著更加容易出錯,排除復雜度也不低。

適用場景:
* 不影響對象的基礎下進行擴展,添加職責

看完上述內容,是不是對如何使用javascript中的裝飾模式有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永和县| 留坝县| 连州市| 周口市| 阿拉善盟| 阿尔山市| 苍溪县| 化州市| 南平市| 太湖县| 兰西县| 平塘县| 夏津县| 喀喇| 谷城县| 连南| 呼和浩特市| 长宁区| 新丰县| 祁连县| 新民市| 罗田县| 开化县| 湛江市| 保靖县| 龙里县| 宁陕县| 湘潭县| 新野县| 邹平县| 绵竹市| 云浮市| 南昌市| 河间市| 泸水县| 溆浦县| 唐海县| 莎车县| 泸溪县| 阿巴嘎旗| 永善县|