日韩性视频-久久久蜜桃-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:抽象装饰器类中的功能而不是装饰器...的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 高清免费视频日本 | 国内老熟妇对白xxxxhd | 大胸奶汁乳流奶水出来h | 日日夜夜一区二区 | 日本r级电影在线观看 | 久久精品国产熟女亚洲AV麻豆 | 操操操视频 | 亚洲AV成人无码精电影在线 | 午夜成人免费影院 | 干美女视频 | 高清欧美性猛交 | 人体内射精一区二区三区 | 秋霞三区 | 激情综合一区二区三区 | av天堂一区二区三区 | 久久禁| 国产精品69毛片高清亚洲 | 色婷婷综合久久久久中文一区二区 | 少妇高潮一69aⅹ | 久久久久久久9999 | 男人手机天堂 | 亚洲 小说 欧美 激情 另类 | 午夜不卡久久精品无码免费 | 亚洲国产精品自拍 | 欧美偷拍综合 | 欧美xxxxav| www.亚洲人 | 国产特黄毛片 | 韩日视频在线 | 国产精品国产三级国产aⅴ 欧美bbbbbbbbbbbb18av | 亚洲美女性生活视频 | h部分肌肉警猛淫文 | 久久中文字幕视频 | 精品国产乱码久久久久久久 | 136福利视频导航 | 性色av蜜臀av浪潮av老女人 | 麻豆传媒视频入口 | 日韩v在线| 四虎综合 | 狠狠干夜夜干 | 精品国产区一区二 | 色漫在线观看 | 久久久噜噜噜www成人 | 欧美一级色片 | 日美女逼逼 | 国产免费黄色录像 | a毛毛片| 99视频在线观看视频 | 黄色一级片免费 | 日韩精品一区二区不卡 | 婷婷国产成人精品视频 | 久久韩日| 精品人妻一区二区三区久久夜夜嗨 | 亚洲精品aaa | 久久伊人精品 | 2021天天操 | 国产黄色一区二区 | 国产精九九网站漫画 | 美国毛片av | 国产又爽又黄的激情精品视频 | 久久视频中文字幕 | 国产午夜精品一区二区三区视频 | 欧美日韩高清一区 | 五月婷婷网站 | 97久久国产亚洲精品超碰热 | 久久精品视频在线免费观看 | 色臀av| 一区二区三区四区日韩 | 黑人精品一区二区三区不 | 成人免费在线观看 | 99久久国 | 国产69精品久久久久999小说 | 久久视频免费观看 | 欧美精品日韩在线观看 | 国产欧美日韩高清 | 国产日日干| 狠狠爱网站 | 在线免费观看中文字幕 | 日韩中文字幕不卡 | www.av视频在线观看 | 国产1级片 | 成人99 | 国产成人在线观看免费网站 | 成人av资源在线 | 成人精品久久久 | 国产又粗又猛又爽又黄的视频小说 | 伊人av综合 | 一区二区午夜 | 青青草一区二区三区 | 乌克兰性极品xxxhd | 午夜香蕉视频 | www.国产视频.com| 嫩草影院懂你的影院 | www.激情五月 | 日本www视频在线观看 | 欧美a在线观看 | 欧美xxx视频 | 另类激情亚洲 | 黄色日韩视频 |