創建者模式主要是為了所謂的高聚合,解耦合,遇到多種配件于一身的情況的時候,放在實體類里面不合適,放在工廠類也不合適,所以就添加了一個創建者類,專門對相應的零件進行組裝,如同汽車了N中配件,同時要是各種配件互相聯系的話也在這個Builder里面一并做了。
明天準備去爬山,這個原理圖就再補上吧:
今天把uml補上了,不過對于uml初學的我就亂亂的先隨便畫一個吧,等以后慢慢入門了在斟酌里面的錯誤和細節:

下面是我自己攢出來的例子(回來的時候著急,把書忘教室了,不知道書上怎么寫的,不過明顯記得一處錯誤,構造器也加上了一個void),為了在Builder里面優化一下,用了一下反射,這樣就可以直接通過多態來實現對于派生類中的實體類進行初始化并且操作了,簡單的實現電腦的組裝:通過工廠類實例化Computer的父類指向子類的實例,然后在Builder里面添加一個工廠類的私有變量,通過構造器把要穿件的Computer實例傳入Builder,然后對其進行解析,反射得到路徑,對其派生類里面的方法進行反射得到相應的配件的集成,轉配完成。少說多做:
~~~
package com.designpattern.builder;
public interface Mouse {
public void add();
}
~~~
~~~
package com.designpattern.builder;
public interface Monitor {
public void add();
}
~~~
~~~
package com.designpattern.builder;
public interface Keyboard {
public void add();
}
~~~
~~~
package com.designpattern.builder;
public interface Displayer {
public void add();
}
~~~
~~~
package com.designpattern.builder;
public interface Factory {
public Computer buildComputer();
}
~~~
~~~
package com.designpattern.builder;
public interface Computer {
public void add();
}
~~~
~~~
package com.designpattern.builder;
public class AcerMouse implements Mouse {
@Override
public void add() {
System.out.println("add AcerMouse");
}
}
~~~
~~~
package com.designpattern.builder;
public class AcerMonitor implements Monitor {
@Override
public void add() {
System.out.println("add AcerMonitor");
}
}
~~~
~~~
package com.designpattern.builder;
public class AcerKeyboard implements Keyboard {
@Override
public void add() {
System.out.println("add AcerKeyboard");
}
}
~~~
~~~
package com.designpattern.builder;
public class AcerDisplayer implements Displayer {
@Override
public void add() {
System.out.println("add AcerDisplayer");
}
}
~~~
~~~
package com.designpattern.builder;
public class AcerFactory implements Factory {
@Override
public Computer buildComputer() {
return new Acer();
}
}
~~~
~~~
package com.designpattern.builder;
public class Acer implements Computer {
@Override
public void add() {
System.out.println("builder Acer");
}
}
~~~
~~~
package com.designpattern.builder;
import java.lang.reflect.Method;
public class Builder {
private Factory factory;
public Builder(Factory factory) {
this.factory = factory;
}
public void builder() throws Exception {
factory.buildComputer().add();
String computer = factory.getClass().toString();
computer = computer.substring(6, computer.length() - 7);
// build Mouse
Class c = Class.forName(computer + "Mouse");
Mouse mouse = (Mouse) c.newInstance();
Method method = c.getMethod("add", null);
method.invoke(mouse, null);
// build Keyboard
c = Class.forName(computer + "Keyboard");
Keyboard keyboard = (Keyboard) c.newInstance();
method = c.getMethod("add", null);
method.invoke(keyboard, null);
// build Displayer
c = Class.forName(computer + "Displayer");
Displayer displayer = (Displayer) c.newInstance();
method = c.getMethod("add", null);
method.invoke(displayer, null);
// build Monitor
c = Class.forName(computer + "Monitor");
Monitor monitor = (Monitor) c.newInstance();
method = c.getMethod("add", null);
method.invoke(monitor, null);
System.out.println("build complete");
}
}
~~~
~~~
package com.designpattern.builder;
public class Client {
public static void main(String[] args) {
try {
new Builder(new AcerFactory()).builder();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
~~~
- 前言
- 前言(目錄、源碼、資料)
- (一)簡單工廠模式(SimpleFatory)
- (二)工廠方法模式(FactoryMethod)
- (三)抽象工廠模式(AbstractFactory)
- (四)創建者模式(Builder)
- (五)原型模式(Prototype)
- (六)單例模式(Singleton)
- (七)外觀模式(Facade)
- (八)適配器模式(Adapter)
- (九)代理模式(Proxy)
- (十)裝飾模式(Decorator)
- (十一)橋模式(birdge)
- (十二)組合模式(Composite)
- (十三)享元模式(Flyweight)
- (十四)模板方法模式(Template)
- (十五)觀察者模式(Observer)
- (十六)狀態模式(State)