十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
直接在方法里寫
創(chuàng)新互聯(lián)公司的客戶來自各行各業(yè),為了共同目標(biāo),我們在工作上密切配合,從創(chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對我們的要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。專業(yè)領(lǐng)域包括成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、電商網(wǎng)站開發(fā)、微信營銷、系統(tǒng)平臺(tái)開發(fā)。
public Room getRoom(){
Room room = new FourWallsRoom();//假設(shè)FourWallsRoom是你定義的一個(gè)Room子類
return room;
}
如果這是一個(gè)接口,你也可以寫一個(gè)類來繼承它,并實(shí)現(xiàn)getRoom方法
java有23種經(jīng)典設(shè)計(jì)模式,分為三類:創(chuàng)建型、結(jié)構(gòu)型和行為型。Builder,建造者,屬于創(chuàng)建型的設(shè)計(jì)模式,相同的還有工廠方法模式、抽象工廠、單例模式和原型模式。建造者模式抽象了對象的實(shí)例化過程,用來幫助系統(tǒng)去創(chuàng)建、組合和表示實(shí)例對象。
建造者模式中一個(gè)常見的栗子就是StringBuilder。
建造者模式可以說是對工廠模式的擴(kuò)展,工廠類提供了生產(chǎn)單個(gè)產(chǎn)品的功能,而建造者模式則可以將各種產(chǎn)品集中起來進(jìn)行統(tǒng)一管理。工廠模式關(guān)注的是整個(gè)產(chǎn)品,建造者模式關(guān)注的是產(chǎn)品各組成部分的創(chuàng)建過程。
比如要?jiǎng)?chuàng)建一輛車,你只關(guān)心汽車本身(之后加以使用),就用工廠模式創(chuàng)建;若還關(guān)注該汽車的各部分是怎么造出來的(或者不同的工廠對產(chǎn)品的各部分的造法不同,就用Builder)。如StringBuilder對字符串的整合,append()、delete()、insert()改變數(shù)據(jù)。
一共23種設(shè)計(jì)模式!
按照目的來分,設(shè)計(jì)模式可以分為創(chuàng)建型模式、結(jié)構(gòu)型模式和行為型模式。
創(chuàng)建型模式用來處理對象的創(chuàng)建過程;結(jié)構(gòu)型模式用來處理類或者對象的組合;行為型模式用來對類或?qū)ο笤鯓咏换ズ驮鯓臃峙渎氊?zé)進(jìn)行描述。
創(chuàng)建型模式用來處理對象的創(chuàng)建過程,主要包含以下5種設(shè)計(jì)模式:
? 工廠方法模式(Factory Method Pattern)
? 抽象工廠模式(Abstract Factory Pattern)
? 建造者模式(Builder Pattern)
? 原型模式(Prototype Pattern)
? 單例模式(Singleton Pattern)
結(jié)構(gòu)型模式用來處理類或者對象的組合,主要包含以下7種設(shè)計(jì)模式:
? 適配器模式(Adapter Pattern)
? 橋接模式(Bridge Pattern)
? 組合模式(Composite Pattern)
? 裝飾者模式(Decorator Pattern)
? 外觀模式(Facade Pattern)
? 享元模式(Flyweight Pattern)
? 代理模式(Proxy Pattern)
行為型模式用來對類或?qū)ο笤鯓咏换ズ驮鯓臃峙渎氊?zé)進(jìn)行描述,主要包含以下11種設(shè)計(jì)模式:
? 責(zé)任鏈模式(Chain of Responsibility Pattern)
? 命令模式(Command Pattern)
? 解釋器模式(Interpreter Pattern)
? 迭代器模式(Iterator Pattern)
? 中介者模式(Mediator Pattern)
? 備忘錄模式(Memento Pattern)
? 觀察者模式(Observer Pattern)
? 狀態(tài)模式(State Pattern)
? 策略模式(Strategy Pattern)
? 模板方法模式(Template Method Pattern)
? 訪問者模式(Visitor Pattern)
推薦你一本好書:《軟件秘笈:設(shè)計(jì)模式那點(diǎn)事》,里面講解的23中設(shè)計(jì)模式例子很生動(dòng),容易理解,還有JDK中設(shè)計(jì)模式應(yīng)用情況,看了收獲挺大的!百度里面搜“設(shè)計(jì)模式”,第一條中設(shè)計(jì)模式百度百科中就有首推該圖書,瀏覽量在20幾萬以上的,不會(huì)錯(cuò)的。好東西大家一起分享!
祝你早日學(xué)會(huì)設(shè)計(jì)模式!
建造者模式是設(shè)計(jì)模式的一種,將一個(gè)復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
建造者模式
實(shí)用范圍
1 當(dāng)創(chuàng)建復(fù)雜對象的算法應(yīng)該獨(dú)立于該對象的組成部分以及它們的裝配方式時(shí)。[1]
2 當(dāng)構(gòu)造過程必須允許被構(gòu)造的對象有不同表示時(shí)。
角色
在這樣的設(shè)計(jì)模式中,有以下幾個(gè)角色:
1 builder:為創(chuàng)建一個(gè)產(chǎn)品對象的各個(gè)部件指定抽象接口。
2 ConcreteBuilder:實(shí)現(xiàn)Builder的接口以構(gòu)造和裝配該產(chǎn)品的各個(gè)部件,定義并明確它所創(chuàng)建的表示,并 提供一個(gè)檢索產(chǎn)品的接口。
3 Director:構(gòu)造一個(gè)使用Builder接口的對象。
4 Product:表示被構(gòu)造的復(fù)雜對象。ConcreteBuilder創(chuàng)建該產(chǎn)品的內(nèi)部表示并定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產(chǎn)品的接口。
例子
Builder
public interface PersonBuilder {
void buildHead();
void buildBody();
void buildFoot();
Person buildPerson();
}
//具體建造工具
ConcreteBuilder
public class ManBuilder implements PersonBuilder {
Person person;
public ManBuilder() {
person = new Person();
}
public void buildbody() {
person.setBody("建造男人的身體");
}
public void buildFoot() {
person.setFoot("建造男人的腳");
}
public void buildHead() {
person.setHead("建造男人的頭");
}
public Person buildPerson() {
return person;
}
}
//建造者
Director
public class PersonDirector {
public Person constructPerson(PersonBuilder pb) {
pb.buildHead();
pb.buildBody();
pb.buildFoot();
return pb.buildPerson();
}
}
Product
public class Person {
private String head;
private String body;
private String foot;
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getFoot() {
return foot;
}
public void setFoot(String foot) {
this.foot = foot;
}
}
public class Man extends Person {
}
Test
public class Test{
public static void main(String[] args) {
PersonDirector pd = new PersonDirector();
Person person = pd.constructPerson(new ManBuilder());
System.out.println(person.getBody());
System.out.println(person.getFoot());
System.out.println(person.getHead());
}
}
result
建造男人的身體
建造男人的腳
建造男人的頭
擴(kuò)展
建造者模式在使用過程中可以演化出多種形式:
省略抽象建造者角色
如果系統(tǒng)中只需要一個(gè)具體的建造者的話,可以省略掉抽象建造者。這是代碼可能如下:
class FoodManager
{
private:
BuilderA * builder;
public:
FoodManager() {builder = new BuilderA();};
void Construct()
{
builder-BuildRiceNoodles();
builder-BuildDrink();
builder-BuildCoolDish();
}
};
省略指導(dǎo)者角色
在具體建造者只有一個(gè)的情況下,如果抽象建造者角色已經(jīng)被省略掉,那么還可以省略掉指導(dǎo)者角色,讓Builder自己扮演指導(dǎo)者和建造者雙重角色。這是代碼可能如下:
//builder
class Builder
{
private:
Food * food;
public:
Builder(){food = new Food();}
void BuildRiceNoodles() {//..};
void BuildCoolDish(){//..};
void BuildDrink(){//..};
Food * getFood(){return food;}
void Construct()
{
BuildRiceNoodles();
BuildCoolDish();
BuildDrink();
}
};
同時(shí),客戶端也需要進(jìn)行相應(yīng)的調(diào)整,如下:
//client
int _tmain(int argc, _TCHAR* argv[])
{
Builder * builder = new Builder();
builder-Construct();
Food *food = builder-getFood();
food-show();
return 0;
}
C#中的StringBuilder就是這樣一個(gè)例子。