摘要:裝飾器模式對(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)類的功能。就增加功能來說,裝飾器模式相比生成子類更為靈活。
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
摘要:七該類也實(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é)議是非常重要的一層,看...
摘要:有效防止黑客對(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)...
摘要:有效防止黑客對(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)...
摘要:有效防止黑客對(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)...
摘要:相關(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í)的...
閱讀 1093·2021-10-12 10:11
閱讀 877·2019-08-30 15:53
閱讀 2286·2019-08-30 14:15
閱讀 2961·2019-08-30 14:09
閱讀 1197·2019-08-29 17:24
閱讀 972·2019-08-26 18:27
閱讀 1283·2019-08-26 11:57
閱讀 2146·2019-08-23 18:23