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

資訊專欄INFORMATION COLUMN

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

zhigoo / 3071人閱讀

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

裝飾器模式

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

裝飾器要素

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

例子

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

//裝飾著模式    
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)點(diǎn):

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

適用場(chǎng)景:

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/79550.html

相關(guān)文章

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

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

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

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

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

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

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

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

    pkhope 評(píng)論0 收藏0
  • 設(shè)計(jì)模式裝飾模式

    摘要:相關(guān)設(shè)計(jì)模式裝飾者模式和代理模式裝飾者模式關(guān)注再一個(gè)對(duì)象上動(dòng)態(tài)添加方法代理模式關(guān)注再對(duì)代理對(duì)象的控制訪問,可以對(duì)客戶隱藏被代理類的信息裝飾著模式和適配器模式都叫包裝模式關(guān)于新職責(zé)適配器也可以在轉(zhuǎn)換時(shí)增加新的職責(zé),但主要目的不在此。 0x01.定義與類型 定義:裝飾模式指的是在不必改變?cè)愇募褪褂美^承的情況下,動(dòng)態(tài)地?cái)U(kuò)展一個(gè)對(duì)象的功能。它是通過創(chuàng)建一個(gè)包裝對(duì)象,也就是裝飾來包裹真實(shí)的...

    chuyao 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<