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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

北风设计模式课程---7、建造者模式

發(fā)布時間:2025/3/21 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 北风设计模式课程---7、建造者模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

北風(fēng)設(shè)計模式課程---7、建造者模式

一、總結(jié)

一句話總結(jié):

設(shè)計模式都是對生活中好的做事方法的一些抽象,使得各司其職,減少出錯。
建造者模式可以看做模仿的生活中:設(shè)計師,施工隊做復(fù)雜房子交給客戶的場景
角色:學(xué)設(shè)計模式分清角色就很簡單了

?

1、建造者模式是什么?

1、造房子:隱藏復(fù)合對象的創(chuàng)建過程
2、不同施工隊:把復(fù)合對象的創(chuàng)建過程加以抽象,通過子類繼承和重載的方式,動態(tài)地創(chuàng)建
3、用戶:用戶單純的從施工隊那里接收房子即可

用來隱藏復(fù)合對象的創(chuàng)建過程,它把復(fù)合對象的創(chuàng)建過程加以抽象,通過子類繼承和重載的方式,動態(tài)地創(chuàng)建具有復(fù)合屬性的對象。

?

2、建造者模式實例?

1、房子基類:比如修房子,有房子基類,如果直接讓用戶修房子的話,修不同的房子修改麻煩
2、施工隊:找工程隊(接口)來修,如果修平房就找修平房的建造工人(接口實例),如果修樓房就找修樓房的建造工人(接口實例),這些具體的工人要返回實例出去的,修房子的過程就是修改房子基類屬性的過程
3、設(shè)計師:有設(shè)計師角色,設(shè)計師角色指導(dǎo)工程隊來修房子,設(shè)計師里面有工程隊的實例,方便指揮工程隊做事

?

3、建造者模式的修房子實例的核心代碼示例?

1、找具體工程隊:HouseBuilder builder = new GongyuBuilder(); //比如這里修公寓 //由工程隊來修
2、設(shè)計師指導(dǎo)工程隊做:HouseDirector director = new HouseDirector(); director.makeHouse(builder);
3、第二步中可以弄成靜態(tài)方法來優(yōu)化一下

?

4、建造者模式應(yīng)用場景是什么?

1、創(chuàng)建對象的時候:Builder模式是為對象的創(chuàng)建而設(shè)計的模式
2、創(chuàng)建的是一個復(fù)合對象:被創(chuàng)建的對象為一個具有復(fù)合屬性的復(fù)合對象
3、關(guān)注對象創(chuàng)建的各部分的創(chuàng)建過程:不同的工廠(這里指builder生成器)對產(chǎn)品屬性有不同的創(chuàng)建方法

?

5、建造者模式的實質(zhì)是什么?

施工隊:做房子由專門的施工隊來做
設(shè)計師:施工隊怎么做由設(shè)計師來指導(dǎo)
用戶:直接接收施工隊做好的house即可

?

6、建造者模式的優(yōu)缺點是什么?

1、方便用戶:用戶不必關(guān)注復(fù)雜房子的創(chuàng)建過程,直接從施工隊手里拿房子即可
2、不同施工隊各司其職:建造不同的房子,或者建造房子中不同的部位,有不同的施工隊

?

7、legend2項目中如何使用建造者模式(比如構(gòu)建獎勵的數(shù)據(jù))?

施工隊:比如構(gòu)建獎勵的數(shù)據(jù),不同的施工隊構(gòu)建不同類型的獎勵,比如裝備、特性書等
設(shè)計師:有一個設(shè)計師,來負責(zé)指導(dǎo)施工隊該怎么做
用戶:用戶只管得到施工隊處理好的數(shù)據(jù)即可

?

?

?

?

二、內(nèi)容在總結(jié)中

1、相關(guān)知識

?

2、代碼

房子基類:House.java

施工隊接口:HouseBuilder.java

平房施工隊(實現(xiàn)施工隊接口):PingFangBuilder.java:做平房

公寓施工隊(實現(xiàn)施工隊接口):GongyuBuilder.java:做公寓

設(shè)計師:HouseDirector.java:指導(dǎo)具體施工隊如何做房子

用戶-主類: MainClass.java:獲取具體施工隊做好的房子

?

房子基類:House.java

1 /* 2 * ·?×ó 3 */ 4 public class House { 5 // μ?°? 6 private String floor; 7 // ?? 8 private String wall; 9 // ?Y?¥ 10 private String housetop; 11 12 public String getFloor() { 13 return floor; 14 } 15 16 public void setFloor(String floor) { 17 this.floor = floor; 18 } 19 20 public String getWall() { 21 return wall; 22 } 23 24 public void setWall(String wall) { 25 this.wall = wall; 26 } 27 28 public String getHousetop() { 29 return housetop; 30 } 31 32 public void setHousetop(String housetop) { 33 this.housetop = housetop; 34 } 35 36 }

?

?

施工隊接口:HouseBuilder.java

/** 1¤3ì?ó*/ public interface HouseBuilder {//DTμ?°?public void makeFloor();//DT??public void makeWall();//DT?Y?¥public void makeHousetop();public House getHouse(); }

?

?

平房施工隊(實現(xiàn)施工隊接口):PingFangBuilder.java:做平房

/** 平房工程隊*/public class PingFangBuilder implements HouseBuilder {House house = new House();public void makeFloor() {house.setFloor("平房-->地板");}public void makeHousetop() {house.setHousetop("平房-->房頂");}public void makeWall() {house.setWall("平房-->墻");}public House getHouse() {return house;}}

?

?

公寓施工隊(實現(xiàn)施工隊接口):GongyuBuilder.java:做公寓

public class GongyuBuilder implements HouseBuilder{House house = new House();public House getHouse() {return house;}public void makeFloor() {house.setFloor("公寓-->地板");}public void makeHousetop() {house.setHousetop("公寓-->房頂");}public void makeWall() {house.setWall("公寓-->墻");}}

?

?

設(shè)計師:HouseDirector.java:指導(dǎo)具體施工隊如何做房子

public class HouseDirector { public void makeHouse(HouseBuilder builder) {builder.makeFloor();builder.makeWall();builder.makeHousetop();}}

?

?

用戶-主類: MainClass.java:獲取具體施工隊做好的房子 public class MainClass {public static void main(String[] args) { // //客戶直接造房子 // House house = new House(); // house.setFloor("地板"); // house.setWall("墻"); // house.setHousetop("屋頂");//由工程隊來修HouseBuilder builder = new GongyuBuilder();//設(shè)計者來做HouseDirector director = new HouseDirector();director.makeHouse(builder);House house = builder.getHouse();System.out.println(house.getFloor());System.out.println(house.getWall());System.out.println(house.getHousetop());}}

?

三、java設(shè)計模式-----6、建造者模式

轉(zhuǎn)自或參考:java設(shè)計模式-----6、建造者模式
https://www.cnblogs.com/xiaobai1226/p/8507239.html

  Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23種設(shè)計模式中的一種。Builder模式是一種對象創(chuàng)建型模式之一,用來隱藏復(fù)合對象的創(chuàng)建過程,它把復(fù)合對象的創(chuàng)建過程加以抽象,通過子類繼承和重載的方式,動態(tài)地創(chuàng)建具有復(fù)合屬性的對象。

  建造者模式的結(jié)構(gòu)

?

  角色

  在這樣的設(shè)計模式中,有以下幾個角色:

    1 builder:為創(chuàng)建一個產(chǎn)品對象的各個部件指定抽象接口。

    2 ConcreteBuilder:實現(xiàn)Builder的接口以構(gòu)造和裝配該產(chǎn)品的各個部件,定義并明確它所創(chuàng)建的表示,并提供一個檢索產(chǎn)品的接口。

    3 Director:構(gòu)造一個使用Builder接口的對象。

    4 Product:表示被構(gòu)造的復(fù)雜對象。ConcreteBuilder創(chuàng)建該產(chǎn)品的內(nèi)部表示并定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產(chǎn)品的接口。

?

  首先,舉個例子,建造者模式我們比方我們要造個房子。

  房子的圖紙

1 public class House { 2 //地板 3 private String floor; 4 // 5 private String wall; 6 //房頂 7 private String roof; 8 9 public String getFloor() { 10 return floor; 11 } 12 public void setFloor(String floor) { 13 this.floor = floor; 14 } 15 public String getWall() { 16 return wall; 17 } 18 public void setWall(String wall) { 19 this.wall = wall; 20 } 21 public String getRoof() { 22 return roof; 23 } 24 public void setRoof(String roof) { 25 this.roof = roof; 26 } 27 }

  有了圖紙后,最笨的方法就是自己造房子

  客戶端

1 public class MainClass { 2 public static void main(String[] args) { 3 //客戶直接造房子 4 House house = new House(); 5 6 house.setFloor("地板"); 7 house.setWall("墻"); 8 house.setRoof("屋頂"); 9 10 System.out.println(house.getFloor()); 11 System.out.println(house.getWall()); 12 System.out.println(house.getRoof()); 13 } 14 }

  可是這樣的方法不是很好,真正我們造房子都是找施工隊,所以我們要把造房子分離出來,交給施工隊

  新建一個施工隊,為了擴展性,聲明一個施工隊的接口

1 public interface HouseBuilder { 2 //修地板 3 public void makeFloor(); 4 //修墻 5 public void makeWall(); 6 //修屋頂 7 public void makeRoof(); 8 //獲得修好的房子 9 public House getHouse(); 10 }

  新建一個施工隊,實現(xiàn)此接口

1 public class LoufangBuilder implements HouseBuilder{ 2 House house = new House(); 3 4 @Override 5 public void makeFloor() { 6 house.setFloor("樓房->地板"); 7 } 8 9 @Override 10 public void makeWall() { 11 house.setWall("樓房->墻"); 12 } 13 14 @Override 15 public void makeRoof() { 16 house.setRoof("樓房->屋頂"); 17 } 18 19 @Override 20 public House getHouse() { 21 return house; 22 } 23 }

  客戶端

1 public class MainClass { 2 public static void main(String[] args) { 3 //施工隊造房子 4 HouseBuilder loufangBuilder = new LoufangBuilder(); 5 loufangBuilder.makeFloor(); 6 loufangBuilder.makeWall(); 7 loufangBuilder.makeRoof(); 8 9 House house = loufangBuilder.getHouse(); 10 System.out.println(house.getFloor()); 11 System.out.println(house.getWall()); 12 System.out.println(house.getRoof()); 13 } 14 }

  可以看到,這樣子造房子就交給施工隊了,但可以看到造房子的具體細節(jié)還在客戶端里,如圖。

  

  這就相當(dāng)于我們在指導(dǎo)施工隊干活,這肯定不是最好的方案,最好的解決方案,是由一個設(shè)計師也可以說是指揮者來指導(dǎo)工程隊,所以在新建一個指揮者

1 public class HouseDirector { 2 private HouseBuilder houseBuilder; 3 4 public HouseDirector(HouseBuilder houseBuilder){ 5 this.houseBuilder = houseBuilder; 6 } 7 8 public void make(){ 9 houseBuilder.makeFloor(); 10 houseBuilder.makeWall(); 11 houseBuilder.makeRoof(); 12 } 13 }

?

?  客戶端

1 public class MainClass { 2 public static void main(String[] args) { 3 //施工隊造房子 4 HouseBuilder loufangBuilder = new LoufangBuilder(); 5 // loufangBuilder.makeFloor(); 6 // loufangBuilder.makeWall(); 7 // loufangBuilder.makeRoof(); 8 HouseDirector houseDirector = new HouseDirector(loufangBuilder); 9 houseDirector.make(); 10 11 House house = loufangBuilder.getHouse(); 12 System.out.println(house.getFloor()); 13 System.out.println(house.getWall()); 14 System.out.println(house.getRoof()); 15 } 16 }

  這樣子,把施工隊交給這個設(shè)計者,施工細節(jié)的工作就由這個設(shè)計者執(zhí)行了。

  當(dāng)然,還有一種寫法,有一些細微的改動,也是更常用的,就是設(shè)計者(Director)不在構(gòu)造時傳入builder,而是在調(diào)用方法時,才傳入,像這樣

1 public class HouseDirector { 2 public void make(HouseBuilder houseBuilder){ 3 houseBuilder.makeFloor(); 4 houseBuilder.makeWall(); 5 houseBuilder.makeRoof(); 6 } 7 }

  客戶端

1 public class MainClass { 2 public static void main(String[] args) { 3 //施工隊造房子 4 HouseBuilder loufangBuilder = new LoufangBuilder(); 5 6 HouseDirector houseDirector = new HouseDirector(); 7 houseDirector.make(loufangBuilder); 8 9 House house = loufangBuilder.getHouse(); 10 System.out.println(house.getFloor()); 11 System.out.println(house.getWall()); 12 System.out.println(house.getRoof()); 13 } 14 }

  這樣子,出來的效果是一樣的。

  這就是一個簡單的建造者模式

  這樣也提高了系統(tǒng)的擴展性與可維護性,如果不想造樓房了,想造一個別墅,只需新增一個別墅施工隊就好了,像這樣

1 public class BieshuBuilder implements HouseBuilder{ 2 House house = new House(); 3 4 @Override 5 public void makeFloor() { 6 house.setFloor("別墅->地板"); 7 } 8 9 @Override 10 public void makeWall() { 11 house.setWall("別墅->墻"); 12 } 13 14 @Override 15 public void makeRoof() { 16 house.setRoof("別墅->屋頂"); 17 } 18 19 @Override 20 public House getHouse() { 21 return house; 22 } 23 }

  客戶端只需把施工隊換成別墅施工隊

public class MainClass {public static void main(String[] args) {//施工隊造房子HouseBuilder bieshuBuilder = new BieshuBuilder();//只需要修改這里 HouseDirector houseDirector = new HouseDirector();houseDirector.make(bieshuBuilder);House house = bieshuBuilder.getHouse();System.out.println(house.getFloor());System.out.println(house.getWall());System.out.println(house.getRoof());} }

?  適用范圍

  1、對象的創(chuàng)建:Builder模式是為對象的創(chuàng)建而設(shè)計的模式

  2、創(chuàng)建的是一個復(fù)合對象:被創(chuàng)建的對象為一個具有復(fù)合屬性的復(fù)合對象

  3、關(guān)注對象創(chuàng)建的各部分的創(chuàng)建過程:不同的工廠(這里指builder生成器)對產(chǎn)品屬性有不同的創(chuàng)建方法

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/Renyi-Fan/p/10993594.html

總結(jié)

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

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

主站蜘蛛池模板: 草久久久 | 精品视频999 | 精品国产亚洲av麻豆 | 红桃视频网站 | 美国一级黄色大片 | 欧美成人久久 | 天天夜碰日日摸日日澡性色av | 亚洲精品国产一区二 | 精品国产18久久久久久 | 高h校园不许穿内裤h调教 | 国产一级免费观看 | 2020亚洲男人天堂 | 日韩欧美自拍偷拍 | 一本一道久久a久久精品综合 | 久久精品视频日本 | 俺也去网站 | 欧美一区二区三区四区在线观看 | 丁香七月激情 | 久久夜色精品国产噜噜亚洲av | 久久爱综合网 | 色婷五月| 综合性色 | 国产区在线视频 | av中文在线天堂 | 日本黄色小说 | 亚洲精品va | 亚洲色图综合在线 | 一区二区三区免费播放 | 梦梦电影免费高清在线观看 | 六月色婷婷 | 日本老肥婆bbbwbbbwzr | 天堂影视在线观看 | 日本一级淫片色费放 | 朝桐光一区二区三区 | 免费看黄网站在线 | 日韩一级片免费看 | 奇米一区二区 | 污污免费视频 | 欧美精品在线一区 | 又色又爽又黄无遮挡的免费视频 | 高清av一区 | 神秘马戏团在线观看免费高清中文 | 亚洲aa视频| 国产美女精品视频 | 草草影院在线 | 中文字幕国产一区二区 | a色视频 | 菲律宾av| 少妇做爰免费理伦电影 | 久久99精品久久久久久三级 | 国产极品美女高潮无套嗷嗷叫酒店 | 蜜美杏av | 福利一区二区在线观看 | 久久久久激情 | 男女久久久 | 亚洲综合欧美 | 日韩作爱 | 免费操片| 欧美一区一区 | 欧美一级片a | 成人av高清在线 | 欧美激情综合色综合啪啪五月 | 97超碰人人爱 | 成人做受黄大片 | 日韩在线中文字幕视频 | 欧美视频网站 | 日韩123区| 男插女动态图 | 日韩美女一级片 | 欧美激情一区二区三级高清视频 | 天堂а√在线最新版中文在线 | 日韩精选av | 一级片大片 | av网站大全在线 | 天天射,天天干 | 免费在线观看国产精品 | 18性xxxxx性猛交 | 丁香六月综合激情 | 高潮毛片7777777毛片 | 九七精品| 日本在线不卡一区 | 国产内谢 | 日本亲与子乱xxx | 日本黄色免费网址 | 中文字字幕第183页 欧美特级一级片 | 四虎最新站名点击进入 | 黄色网页观看 | 一个人看的www视频在线观看 | 在线观看va | 国产精品一区二区麻豆 | 亚洲第一av网 | 伊人色婷婷| 亚洲日本在线播放 | 欧美少妇xxxxx| 国产噜噜噜噜久久久久久久久 | 欧美毛茸茸 | 精品人妻无码一区二区性色 | 国产精品伦一区二区三级视频 | 九九久视频|