生成器模式也称为建造者模式,将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示(Builder)
生成器模式建议将对象构造代码从产品类中抽取出来, 并将其放在一个名为生成器(Builder)的独立对象中。该设计模式实现了构建和装配的解耦,适用于复杂对象的构造。
构成
- 抽象生成器类(Builder)
- 具体生成器类
- 产品类
实例
生产自行车是一个复杂的过程,它包含了车架,车座等组件的生产。而车架又有碳纤维,铝合金等材质
的,车座有橡胶,真皮等材质。对于自行车的生产就可以使用建造者模式。
public class Demo { public static void main(String[] args) { BikeBuilder bb = new BikeBuilder(); Bike bike = bb.createBike(); } }
class Bike{ private String frame; private String seat;
public String getFrame() { return frame; }
public void setFrame(String Frame) { this.frame = frame; }
public String getSeat() { return seat; }
public void setSeat(String seat) { this.seat = seat; } } abstract class Builder{ protected Bike mBike = new Bike(); public abstract void buildFrame(); public abstract void buildSeat(); public abstract Bike createBike(); }
class BikeBuilder extends Builder{
@Override public void buildFrame() { mBike.setFrame("铝合金车架"); }
@Override public void buildSeat() { mBike.setFrame("真皮车座"); }
@Override public Bike createBike() { return mBike; } }
|
如果参数很多,还可以使用链式的Builder,如下示例:
public class Demo2 { Phone phone = new Phone.Builder().cpu("AMD").screen("LG").mainboard("ASUS").memory("WD").build(); } class Phone { private String cpu; private String screen; private String memory; private String mainboard;
public Phone(Builder builder){ cpu = builder.cpu; screen = builder.screen; memory = builder.memory; mainboard = builder.mainboard; } public static final class Builder{ private String cpu; private String screen; private String memory; private String mainboard; public Builder(){};
public Builder cpu(String cpu){ this.cpu = cpu; return this; } public Builder screen(String screen){ this.screen = screen; return this; } public Builder memory(String memory){ this.memory = memory; return this; } public Builder mainboard(String mainboard){ this.mainboard = mainboard; return this; } public Phone build(){ return new Phone(this); } } }
|