国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS 設計模式 十二(裝飾著模式)

zhigoo / 3076人閱讀

摘要:裝飾器模式對客戶透明的方式動態地給一個對象附加上更多的責任,同時又不改變其結構。裝飾器要素抽象構件角色給出一個抽象接口,以規范準備接收附加責任的對象。就增加功能來說,裝飾器模式相比生成子類更為靈活。

裝飾器模式

對客戶透明的方式動態地給一個對象附加上更多的責任,同時又不改變其結構。裝飾模式可以在不使用創造更多子類的情況下,將對象的功能加以擴展。

裝飾器要素

1.抽象構件(Component)角色:給出一個抽象接口,以規范準備接收附加責任的對象。
2.具體構件(ConcreteComponent)角色:定義一個將要接收附加責任的類。
3.裝飾(Decorator)角色:持有一個構件(Component)對象的實例,并定義一個與抽象構件接口一致的接口。
4.具體裝飾(ConcreteDecorator)角色:負責給構件對象“貼上”附加的責任。

例子

咖啡,可加牛奶,也可加糖,或者都加。

//裝飾著模式    
var DP = require("./DesignPattern.js");

function Icoffee() {
  DP.Interface(this, ["showCoffee", "getPrice"]);
}

function Coffee(name, price) {
  this.__proto__ = new Icoffee();
  var _name, _price;
  _name = name;
  _price = price;
  this.showCoffee = function () {
    console.log(_name + "coffee");
  }
  this.getPrice = function () {
    return _price;
  }
}

function Decorator(Coffee) {
  var _coffee;
  _coffee = Coffee;
  this.showCoffee = function () {
    _coffee.showCoffee();
  }
  this.getPrice = function () {
    return _coffee.getPrice();
  }
}

function Sugar(Coffee) {
  this.__proto__ = new Decorator(Coffee);
  this.showCoffee = function () {
    console.log("加糖");
    this.__proto__.showCoffee();
  }
  this.getPrice = function () {
    return this.__proto__.getPrice() + 5;
  }
}

function Milk(Coffee) {
  this.__proto__ = new Decorator(Coffee);
  this.showCoffee = function () {
    console.log("加牛奶");
    this.__proto__.showCoffee();
  }
  this.getPrice = function () {
    this.__proto__.getPrice();
    return this.__proto__.getPrice() + 5;
  }
}

var coffee = new Coffee("拿鐵", 20);

var sugar = new Sugar(coffee);
sugar.showCoffee();
console.log(sugar.getPrice());
console.log("--------------------------------------------");
var milk = new Milk(coffee);
milk.showCoffee();
console.log(milk.getPrice());
console.log("--------------------------------------------");
var sugarmilk = new Milk(sugar);
sugarmilk.showCoffee();
console.log(sugarmilk.getPrice());
console.log("--------------------------------------------");
var sugarmilkmilk = new Milk(sugarmilk);
sugarmilkmilk.showCoffee();
console.log(sugarmilkmilk.getPrice());
裝飾器模式優點:

1.裝飾類和被裝飾類可以獨立發展,不會相互耦合。
2.裝飾模式是繼承的一個替代模式,裝飾模式可以動態擴展一個實現類的功能。就增加功能來說,裝飾器模式相比生成子類更為靈活。

適用場景:

1.擴展一個類的功能。
2.動態增加功能,動態撤銷。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/79550.html

相關文章

  • dubbo源碼解析(二十二)遠程調用——Protocol

    摘要:七該類也實現了,也是裝飾了接口,但是它是在服務引用和暴露過程中加上了監聽器的功能。如果是注冊中心,則暴露該創建一個暴露者監聽器包裝類對象該方法是在服務暴露上做了監聽器功能的增強,也就是加上了監聽器。 遠程調用——Protocol 目標:介紹遠程調用中協議的設計和實現,介紹dubbo-rpc-api中的各種protocol包的源碼,是重點內容。 前言 在遠程調用中協議是非常重要的一層,看...

    孫淑建 評論0 收藏0
  • 你不可錯過的前端面試題(二)

    摘要:有效防止黑客對某一個特定注冊用戶用特定程序暴力破解方式進行不斷的登陸嘗試。可以通過指定候選樣式。存儲大小數據大小不能超過。初始化樣式會對有一定的影響,但魚和熊掌不可兼得,力求影響最小的情況下初始化樣式。二十和聯系他們都能讓元素不可見。 一、前端需要注意的SEO (1)合理的 title、description 和 keywords,他們的搜索權重逐個減小title 強調重點即可,重要關...

    JohnLui 評論0 收藏0
  • 你不可錯過的前端面試題(二)

    摘要:有效防止黑客對某一個特定注冊用戶用特定程序暴力破解方式進行不斷的登陸嘗試??梢酝ㄟ^指定候選樣式。存儲大小數據大小不能超過。初始化樣式會對有一定的影響,但魚和熊掌不可兼得,力求影響最小的情況下初始化樣式。二十和聯系他們都能讓元素不可見。 一、前端需要注意的SEO (1)合理的 title、description 和 keywords,他們的搜索權重逐個減小title 強調重點即可,重要關...

    muddyway 評論0 收藏0
  • 你不可錯過的前端面試題(二)

    摘要:有效防止黑客對某一個特定注冊用戶用特定程序暴力破解方式進行不斷的登陸嘗試??梢酝ㄟ^指定候選樣式。存儲大小數據大小不能超過。初始化樣式會對有一定的影響,但魚和熊掌不可兼得,力求影響最小的情況下初始化樣式。二十和聯系他們都能讓元素不可見。 一、前端需要注意的SEO (1)合理的 title、description 和 keywords,他們的搜索權重逐個減小title 強調重點即可,重要關...

    pkhope 評論0 收藏0
  • 設計模式裝飾模式

    摘要:相關設計模式裝飾者模式和代理模式裝飾者模式關注再一個對象上動態添加方法代理模式關注再對代理對象的控制訪問,可以對客戶隱藏被代理類的信息裝飾著模式和適配器模式都叫包裝模式關于新職責適配器也可以在轉換時增加新的職責,但主要目的不在此。 0x01.定義與類型 定義:裝飾模式指的是在不必改變原類文件和使用繼承的情況下,動態地擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的...

    chuyao 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<