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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

【设计模式】建造者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

發(fā)布時(shí)間:2025/6/17 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【设计模式】建造者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 ) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、建造者模式簡(jiǎn)介
  • 二、建造者模式適用場(chǎng)景
  • 三、建造者模式優(yōu)缺點(diǎn)
  • 四、建造者模式與工廠模式
  • 五、建造者模式代碼示例
    • 1、學(xué)生類
    • 2、建造者抽象類
    • 3、建造者實(shí)現(xiàn)類
    • 4、教師類 ( 非必須 )
    • 5、測(cè)試類
  • 六、實(shí)例類和建造者類定義在同一個(gè)類中 ( 建造者模式常用用法 )
    • 1、實(shí)例類 + 建造者類
    • 2、測(cè)試類





一、建造者模式簡(jiǎn)介



建造者模式 :一個(gè)復(fù)雜對(duì)象構(gòu)建過程 與其 表示 分離 , 使得 同樣的構(gòu)建過程 , 可以 創(chuàng)建不同的表示 ;

用戶只需要 指定 需要建造的類型 就可以 得到該類型對(duì)應(yīng)的產(chǎn)品實(shí)例 , 不關(guān)心建造過程細(xì)節(jié) ;

建造者模式就是 如何逐步構(gòu)建包含多個(gè)組件的對(duì)象 , 相同的構(gòu)建過程 , 可以創(chuàng)建不同的產(chǎn)品 ,


建造者模式類型 : 創(chuàng)建型 ;





二、建造者模式適用場(chǎng)景



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

  • 結(jié)構(gòu)復(fù)雜 : 對(duì)象 有 非常復(fù)雜的內(nèi)部結(jié)構(gòu) , 有很多屬性 ;
  • 分離創(chuàng)建和使用 : 想把 復(fù)雜對(duì)象 的 創(chuàng)建使用 分離 ;

當(dāng)創(chuàng)造一個(gè)對(duì)象 需要很多步驟時(shí) , 適合使用建造者模式 ;
當(dāng)創(chuàng)造一個(gè)對(duì)象 只需要一個(gè)簡(jiǎn)單的方法就可以完成 , 適合使用工廠模式 ;





三、建造者模式優(yōu)缺點(diǎn)



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

  • 封裝性好 : 創(chuàng)建使用 分離 ;
  • 擴(kuò)展性好 : 建造類之間 相互獨(dú)立 , 在 一定程度上解耦 ;

建造者模式缺點(diǎn) :

  • 增加類數(shù)量 : 產(chǎn)生多余的 Builder 對(duì)象 ;
  • 內(nèi)部修改困難 : 如果 產(chǎn)品內(nèi)部發(fā)生變化 , 建造者也要相應(yīng)修改 ;




四、建造者模式與工廠模式



建造者模式 與 工廠模式 :

  • 注重點(diǎn)不同 : 建造者模式 更注重于 方法的調(diào)用順序 ; 工廠模式 注重于 創(chuàng)建產(chǎn)品 , 不關(guān)心方法調(diào)用的順序 ;
  • 創(chuàng)建對(duì)象力度不同 : 創(chuàng)建對(duì)象的力度不同 , 建造者模式可以創(chuàng)建復(fù)雜的產(chǎn)品 , 由各種復(fù)雜的部件組成 , 工廠模式創(chuàng)建出來的都是相同的實(shí)例對(duì)象 ,




五、建造者模式代碼示例




1、學(xué)生類


package builder;/*** 學(xué)生類*/ public class Student {private String name;private String age;private String number;private String address;private String school;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getSchool() {return school;}public void setSchool(String school) {this.school = school;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age='" + age + '\'' +", number='" + number + '\'' +", address='" + address + '\'' +", school='" + school + '\'' +'}';} }

2、建造者抽象類


package builder;/*** 抽象建造者*/ public abstract class StudentBuilder {public abstract void buildName(String name);public abstract void buildAge(String age);public abstract void buildNumber(String number);public abstract void buildAddress(String address);public abstract void buildSchool(String school);public abstract Student makeCourse(); }

3、建造者實(shí)現(xiàn)類


package builder;/*** 建造者實(shí)現(xiàn)類*/ public class StudentBuilderImpl extends StudentBuilder {private Student student = new Student();@Overridepublic void buildName(String name) {this.student.setName(name);}@Overridepublic void buildAge(String age) {this.student.setAge(age);}@Overridepublic void buildNumber(String number) {this.student.setNumber(number);}@Overridepublic void buildAddress(String address) {this.student.setAddress(address);}@Overridepublic void buildSchool(String school) {this.student.setSchool(school);}@Overridepublic Student makeCourse() {return this.student;} }

4、教師類 ( 非必須 )


package builder;/*** 教師類 , 負(fù)責(zé)使用建造者創(chuàng)建學(xué)生信息*/ public class Teacher {/*** 持有學(xué)生建造者*/private StudentBuilder studentBuilder;/*** 構(gòu)造函數(shù)注入建造者* @param studentBuilder*/public Teacher(StudentBuilder studentBuilder) {this.studentBuilder = studentBuilder;}/*** 調(diào)用建造者對(duì)象創(chuàng)建 學(xué)生 實(shí)例對(duì)象* @param name* @param age* @param number* @param address* @param school* @return*/public Student makeStudent(String name, String age,String number, String address,String school) {this.studentBuilder.buildName(name);this.studentBuilder.buildAge(age);this.studentBuilder.buildNumber(number);this.studentBuilder.buildAddress(address);this.studentBuilder.buildSchool(school);return this.studentBuilder.makeCourse();} }

5、測(cè)試類


package builder;public class Main {public static void main(String[] args) {// 創(chuàng)建學(xué)生對(duì)象建造者StudentBuilder studentBuilder = new StudentBuilderImpl();// 創(chuàng)建教師對(duì)象Teacher teacher = new Teacher(studentBuilder);// 教師對(duì)象使用學(xué)生建造者創(chuàng)建學(xué)生 實(shí)例對(duì)象Student student = teacher.makeStudent("小明","12" ,"1","學(xué)院路","第一小學(xué)");System.out.println(student);} }

執(zhí)行結(jié)果 :

Student{name='小明', age='12', number='1', address='學(xué)院路', school='第一小學(xué)'}





六、實(shí)例類和建造者類定義在同一個(gè)類中 ( 建造者模式常用用法 )




1、實(shí)例類 + 建造者類


package builder2;/*** 學(xué)生類*/ public class Student {private String name;private String age;private String number;private String address;private String school;public Student(StudentBuilder builder) {this.name = builder.name;this.age = builder.age;this.number = builder.number;this.address = builder.address;this.school = builder.school;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getSchool() {return school;}public void setSchool(String school) {this.school = school;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age='" + age + '\'' +", number='" + number + '\'' +", address='" + address + '\'' +", school='" + school + '\'' +'}';}/*** 使用靜態(tài)內(nèi)部類作為創(chuàng)建者* 將具體的業(yè)務(wù)類 及其 創(chuàng)建者 定義在一個(gè)類中* 使用鏈?zhǔn)秸{(diào)用 , 每個(gè) build 步驟都返回創(chuàng)建者本身*/public static class StudentBuilder {private String name;private String age;private String number;private String address;private String school;public StudentBuilder buildName(String name) {this.name = name;return this;}public StudentBuilder buildAge(String age) {this.age = age;return this;}public StudentBuilder buildNumber(String number) {this.number = number;return this;}public StudentBuilder buildAddress(String address) {this.address = address;return this;}public StudentBuilder buildSchool(String school) {this.school = school;return this;}public Student build() {return new Student(this);}} }

2、測(cè)試類


package builder2;public class Main {public static void main(String[] args) {// 使用鏈?zhǔn)秸{(diào)用 , 一行代碼創(chuàng)建實(shí)例對(duì)象Student student = new Student.StudentBuilder().buildName("小明").buildAge("12").buildNumber("1").buildAddress("學(xué)院路").buildSchool("第一小學(xué)").build();System.out.println(student);} }

執(zhí)行結(jié)果 :

Student{name='小明', age='12', number='1', address='學(xué)院路', school='第一小學(xué)'}

總結(jié)

以上是生活随笔為你收集整理的【设计模式】建造者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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