日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中手动装入新类到类装饰器_关于java:抽象装饰器类中的功能而不是装饰器...

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中手动装入新类到类装饰器_关于java:抽象装饰器类中的功能而不是装饰器... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我目前正在閱讀《Head First Design Patterns》一書,在"Decorator"一章中有以下示例:

在書中,conditionmentDecorator類被描述為一個abstract decorator。下面是代碼示例:

public abstract class CondimentDecorator extends Beverage {

public abstract String getDescription();

}

因此,基本上內部只是一個抽象方法,它強制所有子類從飲料類重寫getDescription()方法。

這里是一個mocha類的代碼示例,作為decorator。

public class Mocha extends CondimentDecorator {

Beverage beverage;

public Mocha(Beverage beverage) {

this.beverage = beverage;

}

public String getDescription() {

return beverage.getDescription() +", Mocha";

}

public double cost() {

return .20 + beverage.cost();

}

}

其他裝修商(鞭子類,大豆類…)有完全相同的代碼,除了硬編碼的成本數字(.20)和名稱(",摩卡")。

然后,我們通過將前一個對象傳遞給新的裝飾器來使用這個裝飾器模式。

Beverage beverage = new DarkRoast();

beverage = new Mocha(beverage);

beverage = new Mocha(beverage);

beverage = new Whip(beverage);

我的問題是,為什么不簡單地將復制的功能從裝飾器移到抽象裝飾器?下面是我如何重構示例。

抽象裝飾:

public abstract class CondimentDecorator extends Beverage {

private Beverage beverage;

protected CondimentDecorator(Beverage previousBeverage) {

this.beverage = previousBeverage;

}

@Override

public String getDescription() {

return beverage.getDescription() +"," + getAdditionName();

}

@Override

public double cost() {

return beverage.cost() + getAdditionCost();

}

public abstract String getAdditionName();

public abstract double getAdditionCost();

}

裝飾代碼:

public class Mocha extends CondimentDecorator {

public Mocha(Beverage beverage) {

super(beverage);

}

@Override

public String getAdditionName() {

return"Mocha";

}

@Override

public double getAdditionCost() {

return 0.20;

}

}

現在,對于我創建的每個新的裝飾器,我都必須通過超類構造函數的構造函數提供以前的飲料對象,并且我需要重寫僅返回特定裝飾器的唯一值的方法。

這個代碼可以嗎?或者,如果我在抽象裝飾器中具有功能,它是否完全改變了裝飾器模式的要點?

您本質上是在問,如果您對decorator模式的實現進行了更改,那么您是否在改變它的使用點。相反,問問——裝飾圖案的意義是什么?如果你摸索的話,你會發現你仍然有飲料裝飾師,不管有沒有你的編輯。

這個代碼很好。經常閱讀課本(?)在他們的示例中呈現不太完美的代碼,這樣他們就可以專注于一個特定的概念(在本例中是裝飾師),而不必關注其他細節。事實上,你找到了一種改進這本書代碼的方法,這表明你實際上已經很好地理解了這個概念,能夠智能地使用它,而不僅僅是從引用中復制粘貼。

我認為答案是你不想在一節課上做兩件事。

CondimentDecorator做了一件事:連接兩個飲料。它真的應該被命名為"MixDecorator"

當你把調料的共同方面分解成代碼時,你需要創建另一個類,可以稱之為"命名調料",并將名稱和成本放在里面。

總結

以上是生活随笔為你收集整理的java中手动装入新类到类装饰器_关于java:抽象装饰器类中的功能而不是装饰器...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩激情视频 | 青草视频网 | 欧美视频在线一区 | 日本精品一区视频 | 成年人视频在线免费观看 | 正在播放国产精品 | 国产精品国产三级国产专区51区 | 华丽的外出在线 | 久久天天躁狠狠躁夜夜躁2014 | 精品一区二区精品 | 麻豆最新网址 | av中文在线天堂 | 人妻无码一区二区三区久久 | 久久综合五月婷婷 | 婷婷去俺也去 | 亚洲精品v日韩精品 | 污污视频在线观看网站 | 熟女少妇一区二区三区 | 午夜寻花| 久久久久久蜜桃 | 天堂中文在线免费观看 | 综合激情婷婷 | 精品国产乱码久久久久久久 | 中文字幕少妇 | 97视频资源 | 国产日韩在线观看视频 | 亚洲男人天堂av | 午夜看片在线 | 欧美性爱精品一区 | 欧美日韩中文字幕视频 | 天天爽天天搞 | 中文字幕第一页av | 一本色道久久hezyo加勒比 | 91视频www | 国产综合在线观看视频 | 久久影院中文字幕 | 制服丝袜国产精品 | 另类天堂av | 免费毛片一区二区三区久久久 | 九七在线视频 | 国产a自拍 | 夜色导航| 高清在线一区二区三区 | 欧美精品videos另类日本 | 久久久精品免费 | 欧美1页 | 国产精品视频一区二区三 | 操日本女人 | 91免费污视频 | 女同av在线 | 欧美日韩国产区 | 国产又粗又硬 | 欧美日韩中文字幕一区二区三区 | 日韩色图片 | 98久久| 国产色av | 日本一区二区免费高清视频 | 国产精品久久久久久影视 | 九九热在线视频观看 | 人人插插 | 精品91自产拍在线观看二区 | 手机看片欧美日韩 | 亚洲美女啪啪 | 亚洲另类视频 | 男生吃小头头的视频 | 国产成人自拍在线 | 久久精品99久久 | 麻豆国产91在线播放 | 免费在线看黄色 | 亚洲成人自拍网 | 日日夜夜网 | 国产盗摄一区二区三区 | 第四色影音先锋 | 操女人免费视频 | 久久国产精品一区 | 精品久久福利 | 秋霞av在线| 久久精品视频6 | 国产图片区 | 自拍超碰在线 | 久久亚洲精品无码va白人极品 | www.色综合.com| 欧美亚洲天堂 | 欧美性受xxxx狂喷水 | 欧美精品手机在线 | 久久免费手机视频 | 亚洲一区二区三区无码久久 | 日韩国产在线播放 | 黄色一级片免费播放 | 天堂va欧美ⅴa亚洲va一国产 | 韩国黄色视屏 | 国产视频精品自拍 | 亚洲三区视频 | 欧美色视频在线观看 | 五月天婷婷在线播放 | 日韩成人av在线 | 美女娇喘 | 国产精品成人一区二区网站软件 | 国产乱码精品一区二区 |