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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

生成器设计模式的应用

發(fā)布時(shí)間:2023/12/3 asp.net 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 生成器设计模式的应用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

嗨,您好!

今天,我將分享我制作的全新設(shè)計(jì)模式系列的第一個(gè)。 構(gòu)建器設(shè)計(jì)模式是開(kāi)發(fā)嚴(yán)肅的應(yīng)用程序時(shí)非常有用且通用的模式。 在這篇文章中,我將提供一個(gè)很小的構(gòu)建器模式框架,因此您隨時(shí)可以回到這里并使用它。

助記符在處理構(gòu)建器模式時(shí)會(huì)考慮自定義。 當(dāng)我確定應(yīng)該使用它還是最好去工廠時(shí),我總是會(huì)考慮它。 這樣對(duì)我更好。 嘗試一下。

UML

這是小框架的外觀。 簡(jiǎn)單,美觀和直接。

背后的代碼

該代碼也非常簡(jiǎn)單,小巧,簡(jiǎn)潔且易于解釋。 我喜歡編碼表達(dá)力強(qiáng)的代碼,因此無(wú)需過(guò)多評(píng)論。 在此示例中,我這樣做了,因?yàn)樗哂薪坛探巧?在開(kāi)發(fā)過(guò)程中,我為自己建立了一些約定。 我認(rèn)為這樣做非常重要。 就像在開(kāi)發(fā)時(shí)在語(yǔ)言上應(yīng)用正確的語(yǔ)法一樣。

例如:如果我使用的是Builder模式,我總是將后綴Builder放在最后。 好吧,您現(xiàn)在可以說(shuō)或想:什么? 但這實(shí)際上對(duì)于初學(xué)者和經(jīng)驗(yàn)豐富的開(kāi)發(fā)人員來(lái)說(shuō)是非常非常重要的信息。 他們將自動(dòng)看到其背后的想法,并嘗試不破壞其模式。 實(shí)際上,經(jīng)驗(yàn)豐富的開(kāi)發(fā)人員會(huì)喜歡它并嘗試?yán)^續(xù)進(jìn)行出色的工作,因?yàn)樗麄冎谰帉?xiě)此內(nèi)容的開(kāi)發(fā)人員知道他的所作所為,并且肯定有原因。

因此,請(qǐng)始終保持足夠的清晰,并在正確的位置提供正確的信息。 稍后會(huì)有其他人感謝您。 但是現(xiàn)在到代碼了...

// 1. EXAMPLE: PARTS OF THE CUSTOMIZABLE PRODUCT WE WANT public interface Part {// DEFINE THE METHODS YOUR PARTS WILL HAVE...void anyMethodNameYouLike(); }// 2. THE BUILDER METHOD WILL ADD // PARTS RETURNING THE BUILDER ITSELF public interface BuildContract < B > {B mount(Part part); }// 3. DEFINE THE BUILDER'S CONTRUCTION METHOD // WHICH BUILDS AND RETURNS THE FINAL PRODUCT "T" public interface Builder < T > extends BuildContract < Builder < T > > {T build(); }

一個(gè)真實(shí)的例子

沒(méi)有什么比修復(fù)和更好地理解它更好的了。 讓我們建立一個(gè)蛋糕面包店。 您的一位同事想開(kāi)一家面包店,并要求您為他編寫(xiě)面包店的軟件。 我們開(kāi)始做吧..!

順便說(shuō)一句,我衷心地向您推薦,使用UML圖表工具是一種可視化機(jī)制,可以顯示您的想法并提高您的設(shè)計(jì)技能。 讓我們從UML開(kāi)始:

比喻

現(xiàn)在,讓我們使用我們的微型框架,對(duì)我們的面包店進(jìn)行類比。 成分是零件,配方是BuilderContract,而B(niǎo)uilder是建造者本身。 Cake是最終的可定制產(chǎn)品。 CakeBuilder是在定制后實(shí)際創(chuàng)建產(chǎn)品的類(添加所需數(shù)量的零件-成分后)。 客戶將是最終客戶或接受訂單的您的同事。 只是使用或發(fā)揮想象力...現(xiàn)在讓我們深入研究代碼...

成分(部分)

我們示例中的部分是成分。 讓我們實(shí)現(xiàn)一些成分,以后再用它來(lái)制作蛋糕。

// 1. EXAMPLE: PART TO CUSTOMIZATE "INGREDIENTS" public interface Ingredient {// INGREDIENTS WILL HAVE...void printName();String getUnitPrice();void printCalories(); }public class LightMilk implements Ingredient {private int deciLiter;private int calories;private String unitPrice;public LightMilk(int deciLiter){this.deciLiter=deciLiter;}public LightMilk(int deciLiter, int calories, String unitPrice) {super();this.deciLiter = deciLiter;this.calories = calories;this.unitPrice = unitPrice;}@Override public void printName() {System.out.printf(" Light Milk");}@Override public String getUnitPrice() {return unitPrice;}@Override public void printCalories() {System.out.printf(" 76kc");}public int getDeciLiter() {return deciLiter;}public void setDeciLiter(int deciLiter) {this.deciLiter = deciLiter;}public int getCalories() {return calories;}public void setCalories(int calories) {this.calories = calories;}public void setUnitPrice(String unitPrice) {this.unitPrice = unitPrice;} } public class Sugar implements Ingredient {private int gram;private int calories;private String unitPrice;public Sugar(int deciLiter){this.gram=deciLiter;}public Sugar(int gram, int calories, String unitPrice) {super();this.gram = gram;this.calories = calories;this.unitPrice = unitPrice;}@Override public void printName() {System.out.printf(" Sugar");}@Override public String getUnitPrice() {return unitPrice;}@Override public void printCalories() {System.out.printf(" 40kc");}public int getGram() {return gram;}public void setGram(int gram) {this.gram = gram;}public int getCalories() {return calories;}public void setCalories(int calories) {this.calories = calories;}public void setUnitPrice(String unitPrice) {this.unitPrice = unitPrice;} } public class Choco implements Ingredient {private int gram;private int calories;private String unitPrice;public Choco(int gram, int calories, String unitPrice) {super();this.gram = gram;this.calories = calories;this.unitPrice = unitPrice;}public int getGram() {return gram;}public void setGram(int gram) {this.gram = gram;}public int getCalories() {return calories;}public void setCalories(int calories) {this.calories = calories;}public void setUnitPrice(String unitPrice) {this.unitPrice = unitPrice;}@Override public void printName() {System.out.printf(" Chocolate");}@Override public void printCalories() {System.out.printf(" 389kc");}@Override public String getUnitPrice() {return unitPrice;} } public class NoSugar implements Ingredient {private int gram;private int calories;private String unitPrice;public NoSugar(int deciLiter){this.gram=deciLiter;}public NoSugar(int gram, int calories, String unitPrice) {super();this.gram = gram;this.calories = calories;this.unitPrice = unitPrice;}@Override public void printName() {System.out.printf(" No Sugar");}@Override public String getUnitPrice() {return unitPrice;}@Override public void printCalories() {System.out.printf(" 0kc");}public int getGram() {return gram;}public void setGram(int gram) {this.gram = gram;}public int getCalories() {return calories;}public void setCalories(int calories) {this.calories = calories;}public void setUnitPrice(String unitPrice) {this.unitPrice = unitPrice;} } public class Milk implements Ingredient {private int deciLiter;private int calories;private String unitPrice;public Milk(int deciLiter){this.deciLiter=deciLiter;}public Milk(int deciLiter, int calories, String unitPrice) {super();this.deciLiter = deciLiter;this.calories = calories;this.unitPrice = unitPrice;}@Override public void printName() {System.out.printf(" Milk");}@Override public String getUnitPrice() {return unitPrice;}@Override public void printCalories() {System.out.printf(" 128kc");}public int getDeciLiter() {return deciLiter;}public void setDeciLiter(int deciLiter) {this.deciLiter = deciLiter;}public int getCalories() {return calories;}public void setCalories(int calories) {this.calories = calories;}public void setUnitPrice(String unitPrice) {this.unitPrice = unitPrice;} }

建筑商合同

這是我們示例中的食譜。

// 2. THE BUILDER METHOD WILL ADD // INGREDIENTS RETURNING THE BUILDER ITSELF public interface Recipe < B > {B addIngredient(Ingredient ingredient); } // 3. DEFINE THE BUILDER CONTRUCTION METHOD // WHICH BUILDS AND RETURNS THE FINAL PRODUCT "T" public interface Builder < T > extends Recipe < Builder < T > > {T build(); } import java.util.ArrayList; import java.util.List; // 4. IMPLEMENT THE BUILDER ACC. TO YOUR NEEDS public class CakeBuilder implements Builder < Cake > {// IN THIS CASE THE PARTS ARE THE INGREDIENTSprivate List < Ingredient > ingredients=new ArrayList < Ingredient > ( );@Overridepublic Cake build() {if(!ingredients.isEmpty()){// THE FINAL PRODUCT IS A CHOCO-MUFFINreturn new Cake(ingredients);}return new Cake(null);}@Override// BECAUSE I ALWAYS GET A BUILDER BACK, I'M ABLE TO// ADD A LOT OF PARTS BEFORE I CALL "BUILD()"public Builder < Cake > addIngredient(Ingredient ingredient) {if(ingredient!=null){ingredients.add(ingredient);}return this;} }

產(chǎn)品

在我們的示例中,要構(gòu)建的產(chǎn)品是蛋糕。

import java.util.List;public class Cake {public Cake(List < Ingredient > ingredients){String muffin = "";if(ingredients==null){System.out.println(" zero cake "+muffin);return;}// PRINT OUT MUFFIN INGREDIENTSSystem.out.printf(" Cake with: ");for (Ingredient ingredient : ingredients) {ingredient.printName();}// PRINT OUT PART PRICESfor (Ingredient ingredient : ingredients) {muffin+=" "+ingredient.getUnitPrice();//NOPMD}System.out.println(" - Price: "+muffin);}public void printResult(){System.out.println(" Cake is ready!");} }

測(cè)試它

最后客戶端測(cè)試。 在這里我們可以看到它的用法:

// 5. TESTING THE CHOCO-BUILDER public class Client {public static void main(String[] args) {Builder < Cake > chocoMuffinBuilder = new CakeBuilder();chocoMuffinBuilder.addIngredient(new Choco(10, 23, "3.39"));chocoMuffinBuilder.addIngredient(new Milk(34, 67, "1.57"));chocoMuffinBuilder.addIngredient(new Sugar(34, 67, "2.00"));final Cake chocoMuffin = chocoMuffinBuilder.build();chocoMuffin.printResult();} }

就這樣! 希望你喜歡!

翻譯自: https://www.javacodegeeks.com/2014/08/builder-design-pattern-applied.html

總結(jié)

以上是生活随笔為你收集整理的生成器设计模式的应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。