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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

设计模式 - 建造者模式(Builder Pattern)

發(fā)布時(shí)間:2025/1/21 asp.net 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式 - 建造者模式(Builder Pattern) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • Separate the construction of a complex object from its representation so that the sameconstruction process can create different representations.(將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。)

建造者模式通用類圖

?

?

image.png

看上面圖可能有點(diǎn)懵,舉一個(gè)簡(jiǎn)單的例子

假如現(xiàn)在有一個(gè)生產(chǎn)電腦代工廠,可能會(huì)生產(chǎn)很多電腦品牌的組裝電腦,不同的電腦品牌組裝電腦的順序可能不一樣。
假如現(xiàn)在要為兩個(gè)電腦品牌(聯(lián)想、華為)組裝電腦
這些部件假如只有顯示器、鍵盤、鼠標(biāo)、硬盤
需求就是這樣,為不同電腦品牌組裝順序不一樣,但是都提供一個(gè)公共的方法assemble()
需求有點(diǎn)復(fù)雜我們現(xiàn)在看具體代碼

在ComputerModel中我們定義了一個(gè)setSequence方法,組裝點(diǎn)的這幾個(gè)動(dòng)作要如何排布,是在這個(gè)ArrayList中定義的。然后assemble()方法根據(jù)sequence定義的順序完成指定的順序動(dòng)作

首先創(chuàng)建ComputerModel

import org.apache.commons.lang3.StringUtils;import java.util.ArrayList; import java.util.List;/*** @author shuliangzhao* @Title: ComputerModel* @ProjectName design-parent* @Description: TODO* @date 2019/5/29 22:40*/ public abstract class ComputerModel {//sequence控制組裝順序private List<String> sequence = new ArrayList<>();protected abstract void productScreen();protected abstract void productMouse();protected abstract void productKeyboard();protected abstract void productHardDisk();public void assemble() {for (String str:sequence) {if (StringUtils.equals(str,"screen")) {this.productScreen();}else if (StringUtils.equals(str,"mouse")) {this.productMouse();}else if (StringUtils.equals(str,"keyboard")) {this.productKeyboard();}else if (StringUtils.equals(str,"hardDisk")) {this.productHardDisk();}}}public void setSequence(List<String> sequence) {this.sequence = sequence;} }

LenovoComputer

/*** @author shuliangzhao* @Title: LenovoComputer* @ProjectName design-parent* @Description: TODO* @date 2019/5/29 22:49*/public class LenovoComputer extends ComputerModel {@Overrideprotected void productScreen() {System.out.println("聯(lián)想電腦組裝屏幕");}@Overrideprotected void productMouse() {System.out.println("聯(lián)想電腦組裝鼠標(biāo)");}@Overrideprotected void productKeyboard() {System.out.println("聯(lián)想電腦組裝鍵盤");}@Overrideprotected void productHardDisk() {System.out.println("聯(lián)想電腦組裝硬盤");} }

HuaweiComputer

/*** @author shuliangzhao* @Title: HuaweiComputer* @ProjectName design-parent* @Description: TODO* @date 2019/5/29 22:51*/ public class HuaweiComputer extends ComputerModel {@Overrideprotected void productScreen() {System.out.println("華為電腦組裝屏幕");}@Overrideprotected void productMouse() {System.out.println("華為電腦組裝鼠標(biāo)");}@Overrideprotected void productKeyboard() {System.out.println("華為電腦組裝鍵盤");}@Overrideprotected void productHardDisk() {System.out.println("華為電腦組裝硬盤");} }

ComputerBuilder

/*** @author shuliangzhao* @Title: ComputerBuilder* @ProjectName design-parent* @Description: TODO* @date 2019/5/29 22:51*/ public abstract class ComputerBuilder {//建造一個(gè)模型,你要給我一個(gè)順序要求,就是組裝順序public abstract void setSequence(List<String> sequence);//設(shè)置完畢順序后,就可以直接拿到這個(gè)電腦組裝順序public abstract ComputerModel getComputerModel(); }

HuaweiBuilder

/*** @author shuliangzhao* @Title: HuaweiBuilder* @ProjectName design-parent* @Description: TODO* @date 2019/5/29 22:56*/ public class HuaweiBuilder extends ComputerBuilder {private HuaweiComputer huaweiComputer = new HuaweiComputer();@Overridepublic void setSequence(List<String> sequence) {this.huaweiComputer.setSequence(sequence);}@Overridepublic ComputerModel getComputerModel() {return this.huaweiComputer;} }

LenovoBuilder

/*** @author shuliangzhao* @Title: LenovoBuilder* @ProjectName design-parent* @Description: TODO* @date 2019/5/29 22:54*/ public class LenovoBuilder extends ComputerBuilder {private LenovoComputer lenovoComputer = new LenovoComputer();@Overridepublic void setSequence(List<String> sequence) {lenovoComputer.setSequence(sequence);}@Overridepublic ComputerModel getComputerModel() {return this.lenovoComputer;} }

場(chǎng)景類Director

/*** 場(chǎng)景類可以根據(jù)不同場(chǎng)景組裝電腦* @author shuliangzhao* @Title: Director* @ProjectName design-parent* @Description: TODO* @date 2019/5/29 22:57*/ public class Director {private List<String> sequence = new ArrayList<>();private HuaweiBuilder huaweiBuilder = new HuaweiBuilder();private LenovoBuilder lenovoBuilder = new LenovoBuilder();//組裝華為A系列先屏幕、鼠標(biāo)、鍵盤、硬盤public HuaweiComputer getAHuaweiComputer() {this.sequence.clear();sequence.add("screen");sequence.add("mouse");sequence.add("keyboard");sequence.add("hardDisk");this.huaweiBuilder.setSequence(sequence);return (HuaweiComputer) this.huaweiBuilder.getComputerModel();}//組裝華為B系列先鼠標(biāo)、屏幕、硬盤、鍵盤public HuaweiComputer getBHuaweiComputer() {this.sequence.clear();sequence.add("mouse");sequence.add("screen");sequence.add("hardDisk");sequence.add("keyboard");this.huaweiBuilder.setSequence(sequence);return (HuaweiComputer) this.huaweiBuilder.getComputerModel();}//組裝聯(lián)想A系列先硬盤、鍵盤、鼠標(biāo)、屏幕public LenovoComputer getALenovoComputer() {this.sequence.clear();sequence.add("hardDisk");sequence.add("keyboard");sequence.add("mouse");sequence.add("screen");this.lenovoBuilder.setSequence(sequence);return (LenovoComputer) this.lenovoBuilder.getComputerModel();}//組裝聯(lián)想B系列先鍵盤、鼠標(biāo)、硬盤屏幕public LenovoComputer getBLenovoComputer() {this.sequence.clear();sequence.add("keyboard");sequence.add("mouse");sequence.add("hardDisk");sequence.add("screen");this.lenovoBuilder.setSequence(sequence);return (LenovoComputer) this.lenovoBuilder.getComputerModel();} }

客戶端

/*** @author shuliangzhao* @Title: Client* @ProjectName design-parent* @Description: TODO* @date 2019/5/29 23:07*/ public class Client {public static void main(String[] args) {Director director = new Director();//組裝華為A系列10臺(tái)for (int i = 0;i<2;i++) {director.getAHuaweiComputer().assemble();}//組裝聯(lián)想B系列10臺(tái)for (int i=0;i<2;i++) {director.getBLenovoComputer().assemble();}} }

運(yùn)行結(jié)果

?

image.png

  • 建造者模式優(yōu)點(diǎn):

1.具有封裝性,使用建造者模式可以使客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié)。
2.建造者獨(dú)立,容易擴(kuò)展

  • 建造者模式使用場(chǎng)景:

1.相同的方法,不同的執(zhí)行順序,產(chǎn)生不同的事件結(jié)果時(shí),可以采用建造者模式
2.產(chǎn)品類非常復(fù)雜,或者產(chǎn)品類中的調(diào)用順序不同產(chǎn)生了不同的效能,這個(gè)時(shí)候使用建
造者模式非常合適。

???????

總結(jié)

以上是生活随笔為你收集整理的设计模式 - 建造者模式(Builder Pattern)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 91黄瓜| 日韩伦理av | 成人午夜影视 | 日韩婷婷 | 精品视频入口 | 黄色片网站免费看 | 国产高清中文字幕 | 久久婷婷色综合 | 国产精品久久久久毛片大屁完整版 | 国产又爽又黄的激情精品视频 | 自拍日韩亚洲一区在线 | 日韩黄 | 午夜免费看片 | 免费激情 | 国产精品久久久久久久久久久久久久久久 | 窝窝在线视频 | 欧美成人福利视频 | 一个人免费在线观看视频 | 色八区 | 香蕉av一区二区三区 | 欧美天堂视频 | 最污网站在线观看 | 妖精视频一区二区三区 | 天天干b| 久久久久久999 | 亚洲福利影院 | 青青草原国产在线观看 | 激情视频一区二区三区 | 国产人久久人人人人爽 | 日韩三级视频在线播放 | 久久久激情 | 国产特黄一级片 | 杨贵妃颤抖双乳呻吟求欢小说 | 欧美123| 亚洲av永久无码精品一区二区国产 | 日韩xxxxxxxxx | 欧美成人三级在线 | 深爱婷婷 | 亚洲成年网 | 国产精品美女一区 | 侵犯女教师一区二区三区 | 四虎精品欧美一区二区免费 | 亚洲激情啪啪 | 国产又粗又猛又爽又黄又 | 在线艹 | 亚洲aⅴ在线观看 | 性高湖久久久久久久久aaaaa | 亚洲看看 | 亚洲欧美精品在线 | 国产精品电影网 | 一级网站在线观看 | 草莓视频成人在线 | 久久96 | 日韩久久久久久久 | 久久久久久久久久久影视 | av一区免费| 黄瓜视频色版 | 日韩三级黄色 | 亚洲第一av网 | 男人天堂影院 | 国产福利第一页 | 日韩夜夜 | 国产精品夜色一区二区三区 | 欧美三级电影在线观看 | 久久久国产精华液999999 | 亚洲精品在线视频 | 国产精品电影网站 | 女人高潮娇喘1分47秒 | 国产人人看 | 朝鲜女人性猛交 | 欧美天堂在线视频 | 欧美日韩高清一区二区三区 | 黄色三级图片 | 97在线免费| 亚洲高清视频一区二区 | 明里柚番号| 五月婷婷婷婷 | 亚洲黄色免费电影 | 欧洲一区在线观看 | 91久久久久久 | 日韩精品一区二区免费视频 | 日韩中文字幕网 | 刘亦菲毛片一区二区三区 | 奇米影视欧美 | 88av网站| 欧美成人免费在线视频 | 亚洲精品视频观看 | 亚洲精品网址 | 免费三片在线视频 | 中文av在线播放 | 精品久久久无码中文字幕 | 91精品国产高清一区二区三蜜臀 | 国产91久| 精品福利三区3d卡通动漫 | 青青久在线视频 | 99视频在线精品 | 国产三级做爰高清在线 | 欧美成人免费在线 | 91精品视频免费看 |