概念
创建者模式又叫建造者模式
能够将一个复杂对象的构建和表示分离,让相同构建过程可以创建不同的表示。
创建者模式隐藏了复杂对象的创建过程,把过程加以抽象,通过继承或重载动态创建具有复合属性的对象。
作用
在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂对象。
用户只需要给出对象的内容和类型。
例:
造汽车和买汽车
建造者模式:全部制造好。
用户:需要xxx型号,给钱提车。
设计与实现
设计思想:自行车Bike
1、创造轮胎、座椅、车架子
package com.xjion.builder;
//轮胎
public interface Tire {
void tire();
}
package com.xjion.builder;
//座椅
public interface Seat {
void seat();
}
package com.xjion.builder;
//车架子
public interface Frame {
void frame();
}
2、创建一辆自行车
package com.xjion.builder;
//自行车
public class Bike {
private Frame frame;
private Seat seat;
private Tire tire;
public Frame getFrame() {
return frame;
}
public void setFrame(Frame frame) {
this.frame = frame;
}
public Seat getSeat() {
return seat;
}
public void setSeat(Seat seat) {
this.seat = seat;
}
public Tire getTire() {
return tire;
}
public void setTire(Tire tire) {
this.tire = tire;
}
}
3、创建各种质量的配件
package com.xjion.builder;
public class SolidTire implements Tire {
@Override
public void tire() {
System.out.println("实心轮胎!!!");
}
}
package com.xjion.builder;
public class DermisSeat implements Seat {
@Override
public void seat() {
System.out.println("真皮座椅!!!");
}
}
package com.xjion.builder;
public class AlloyFrame implements Frame {
@Override
public void frame() {
// TODO Auto-generated method stub
System.out.println("合金车架!!!");
}
}
4、制造一辆摩拜单车
package com.xjion.builder;
//制造一辆摩拜
public class MobikeBuilder extends Builder {
private Bike mobike = new Bike();
@Override
void buildFrame() {
mobike.setFrame(new AlloyFrame());
}
@Override
void buildSeat() {
mobike.setSeat(new DermisSeat());
}
@Override
void buildTire() {
mobike.setTire(new SolidTire());
}
@Override
Bike crateBike() {
// TODO Auto-generated method stub
return mobike;
}
}
5、指挥者构建产品
package com.xjion.builder;
//指挥者
public class Director {
private Builder mbBuilder = null;
public Director(Builder mbBuilder) {
this.mbBuilder = mbBuilder;
}
public Bike construct() {
mbBuilder.buildFrame();
mbBuilder.buildSeat();
mbBuilder.buildTire();
return mbBuilder.crateBike();
}
}
6、用户使用
package com.xjion.builder;
//使用
public class Test {
public static void main(String[] args) {
showBike(new MobikeBuilder());
}
private static void showBike(Builder builder) {
Director director = new Director(builder);
Bike bike = director.construct();
bike.getFrame().frame();
bike.getSeat().seat();
bike.getTire().tire();
}
}
特点
方便用户直接创建复杂的对象
代码复用性和封装性
在参数过多时,建造者模式会显得非常灵活
建造者模式与抽象工厂模式
抽象工厂模式:返回各个部件,客户端实例化工厂类,调用需要的产品部件,负责生产产品部件的。
建造者模式:返回组装好的完整产品,指挥者负责组装完整产品,负责将产品部件组装成完整产品的。