亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

zhigoo / 3112人閱讀

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

裝飾器模式

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

裝飾器要素

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

例子

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

//裝飾著模式    
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());
裝飾器模式優(yōu)點:

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

適用場景:

1.擴展一個類的功能。
2.動態(tài)增加功能,動態(tài)撤銷。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/79550.html

相關(guān)文章

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

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

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

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

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

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

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

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

    pkhope 評論0 收藏0
  • 設(shè)計模式裝飾模式

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

    chuyao 評論0 收藏0

發(fā)表評論

0條評論

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