概述
Builder模式:將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
使用場(chǎng)景
相同的方法,不同的執(zhí)行順序,產(chǎn)生不同的事件結(jié)果 多個(gè)部件或零件,都可以裝配到一個(gè)對(duì)象中,但產(chǎn)生的運(yùn)行結(jié)果又不相同時(shí) 產(chǎn)品類非常復(fù)雜,或者產(chǎn)品類中的調(diào)用順序不同產(chǎn)生不同的作用 當(dāng)初始化一個(gè)對(duì)象特別復(fù)雜,如參數(shù)多,且很多參數(shù)都具有默認(rèn)值時(shí)下面從一個(gè)Person例子進(jìn)行分析重疊構(gòu)造器模式、JavaBeans模式、Builder模式的使用。Person類有兩個(gè)必要參數(shù)(id和name),有5個(gè)可選參數(shù)(age,sex,phone,address和desc)
重疊構(gòu)造器模式
在這種模式下,你提供第一個(gè)只有必要參數(shù)的構(gòu)造器,第二個(gè)構(gòu)造器有一個(gè)可選參數(shù),第三個(gè)有兩個(gè)可選參數(shù),依此類推,最后一個(gè)構(gòu)造器包含所有的可選參數(shù)。下面看看其編程實(shí)現(xiàn):
/ * 使用重疊構(gòu)造器模式 */public class Person { //必要參數(shù) private final int id; private final String name; //可選參數(shù) private final int age; private final String sex; private final String phone; private final String address; private final String desc; public Person(int id, String name) { this(id, name, 0); } public Person(int id, String name, int age) { this(id, name, age, ""); } public Person(int id, String name, int age, String sex) { this(id, name, age, sex, ""); } public Person(int id, String name, int age, String sex, String phone) { this(id, name, age, sex, phone, ""); } public Person(int id, String name, int age, String sex, String phone, String address) { this(id, name, age, sex, phone, address, ""); } public Person(int id, String name, int age, String sex, String phone, String address, String desc) { this.id = id; this.name = name; this.age = age; this.sex = sex; this.phone = phone; this.address = address; this.desc = desc; }}從上面的代碼中,當(dāng)你想要?jiǎng)?chuàng)建實(shí)例的時(shí)候,就利用參數(shù)列表最短的構(gòu)造器,但該列表中包含了要設(shè)置的所有參數(shù):
Person person = new Persion(1, "李四", 20, "男", "18800000000", "China", "測(cè)試使用重疊構(gòu)造器模式");
重疊構(gòu)造器可行,但是當(dāng)有許多參數(shù)的時(shí)候,創(chuàng)建使用代碼會(huì)很難寫,并且較難以閱讀
JavaBeans模式
采用Javabean 的寫法,寫一堆屬性的setter方法,通過生成對(duì)象,讓后調(diào)用setter方法給屬性賦值。
/ * 使用JavaBeans模式 */public class Person { //必要參數(shù) private int id; private String name; //可選參數(shù) private int age; private String sex; private String phone; private String address; private String desc; public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public void setSex(String sex) { this.sex = sex; } public void setPhone(String phone) { this.phone = phone; } public void setAddress(String address) { this.address = address; } public void setDesc(String desc) { this.desc = desc; }
新聞熱點(diǎn)
疑難解答
圖片精選