日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本在线视频免费观看 | 久久久穴 | 男女三级视频 | 一级日韩毛片 | 秋霞影院午夜丰满少妇在线视频 | 久久精品人妻一区二区三区 | 伊人网站在线观看 | 国产无| 日本a视频 | 鸥美毛片| 精品国产乱码久久久久久88av | 半推半就一ⅹ99av | 午夜久久久久久久久久影院 | 在线观看免费高清在线观看 | 日韩毛片儿 | 爱视频福利网 | 国产女人18毛片18精品 | 成人动漫h在线观看 | www,xxx日本 | 精品熟女一区二区 | 人妻aⅴ无码一区二区三区 阿v免费视频 | 日本免费三级网站 | 日韩欧美少妇 | 日韩免费视频一区二区 | 嫩草在线观看 | 国产精品三级电影 | 中文字幕亚洲成人 | 久久国产99| a级片黄色 | 中出中文字幕 | 色噜噜影院 | 亚洲欧美一区二区激情 | 亚洲精华液一区二区 | 亚洲一区二区三区免费在线观看 | 男生女生操操操 | 成人特级毛片69免费观看 | 一区一区三区产品乱码 | 肉丝美脚视频一区二区 | 日本道中文字幕 | 少妇人妻邻居 | 精品国偷自产一区二区三区 | 免费看美女隐私网站 | 91sex国产| 天堂在线精品视频 | 96国产精品 | 亚洲人视频在线 | 看看黄色片 | 美女黄色影院 | 成人18视频免费69 | 久久久久久在线观看 | 日本福利小视频 | 上原亚衣av一区二区三区 | 国产一区二区三区视频 | 国产乱人乱偷精品视频 | 懂色av蜜臀av粉嫩av分享 | 国产十八熟妇av成人一区 | 18一20岁毛毛片 | wwwav视频在线观看 | 国产自产自拍 | 久久精品国产亚洲av麻豆图片 | 亚洲精品视频免费在线观看 | 国产精品美女视频 | 让男按摩师摸好爽 | 美女网站黄页 | 国产高清在线精品 | 亚洲欧美日本一区 | 一区二区免费在线视频 | 丝袜熟女一区二区三区 | 日本xxxx免费 | 午夜视频h | 色片网站在线观看 | av体验区 | 悟空影视大全免费高清观看在线 | 凹凸国产熟女精品视频 | 国产三级视频 | 天堂中文字幕免费一区 | 香蕉在线网站 | 99热只有这里有精品 | 亚洲视频在线观看网址 | 噼里啪啦国语版在线观看 | 欧美成年视频 | 日本人做爰全过程 | 日本少妇全体裸体洗澡 | 欧洲一区二区在线观看 | 国产伦精品一区二区三区在线 | 国产精品久久久久无码av色戒 | 色姑娘天天操 | 日本中文字幕观看 | 欧美在线黄色 | 91在线观 | 日本大尺度床戏揉捏胸 | 免费在线观看成人av | 91成人在线观看喷潮 | 日本黄网在线观看 | 成人午夜在线视频 | 国产欧美久久久久久 | 99热9| 最新av免费在线观看 | 各种含道具高h调教1v1男男 |