本文选择建造者模式进行分析。
一、简单介绍
建造者模式,就是简化并管理一个对象的创建与使用的模式方法。将一个复杂对象的构建与表示分离,使得用户在创建不同的对象时,在不知道建造细节的情况下,就可以使用外表相同的构建过程创建对象。
二、适用对象
简单总结一下:Director指挥整个构造过程;Builder是各部件的创造请求集合;ConcreteBuilder是各部件的创造具体实现;最终构建成复杂完整的Product。
五、代码示例(单车)
1、客户端:
public class Click {
public static void main(String[] args) {
showBike(new OfoBuilder()); //ofo
showBike(new MobikeBuilder()); //摩拜
}
private void showBike(Builder builder) {
Director director = new Director(builder); //只用Director
Bike bike = director.construct(); //用户只需要找指挥者不需要知道具体生产过程
bike.getFrame().frame(); //得到具体产品参数(需求)来生产
bike.getSeat().seat();
bike.getTire().tire();
}
}
2、指挥者Director:
public class Director {
private Builder mBuilder = null;
public Director(Builder builder) { //让指挥者找生产者安排生产
mBuilder = builder;
}
}
3、抽象建造声明Builder:
public abstract class Builder {
abstract void buildFrame(); //架构
abstract void buildSeat(); //座椅
abstract void buildTire(); //轮胎
abstract Bike createBike(); //组装
public Bike construct() { //过程
this.buildFrame();
this.buildSeat();
this.buildTire();
return mBuilder.createBike();
}
}
4、具体建造过程:
不同产品需要不同的具体建造过程。
//摩拜
public class MobikeBuilder extends Builder{
private Bike mBike = new Bike();
void buildFrame() {
mBike.setFrame(new AlloyFrame());
}
void buildSeat() {
mBike.setSeat(new DermisSeat());
}
void buildTire() {
mBike.setTire(new SolidTire());
}
Bike createBike() {
return mBike;
}
}
//ofo
public class OfoBuilder extends Builder{
private Bike mBike = new Bike();
void buildFrame() {
mBike.setFrame(new CarbonFrame());
}
void buildSeat() {
mBike.setSeat(new RubberSeat());
}
void buildTire() {
mBike.setTire(new InflateTire());
}
Bike createBike() {
return mBike;
}
}
5、产品Product:
public class Bike {
private IFrame frame; //框架
private ISeat seat; //座位
private ITire tire; //轮胎
public IFrame getFrame() {
return frame;
}
public void setFrame(IFrame frame) {
this.frame = frame; //调用不同的set
}
public ISeat getSeat() {
return seat;
}
public void setSeat(ISeat seat) {
this.seat = seat; //调用不同的set
}
public ITire getTire() {
return tire;
}
public void setTire(ITire tire) {
this.tire = tire; //调用不同的set
}
}
六、总结一下
1、使用建造者模式后,用户创建一个产品对象是不用知道产品的内部细节,只需要给一些需求
2、不同的建造者(厂家)之间是相互独立的,接口耦合到指挥者,便于扩展系统。
3、具体的建造过程也是相互独立,接口耦合到建造者,具体过程可以逐步细化,而对其他模块过程没有影响。
4、要求不同的产品具有较多的共性,比如相似的组成部件、相似的组装过程。如果变化太大,具体的建造过程就要很多,系统会比较复杂。
5、建造者模式最后返回的是一个较完整的产品。抽象工厂模式返回一串产品族。
6、使用建造者模式,用户通过指挥者指导产品生产,指挥者找生产者建造各部件生产并组装。使用抽象工厂模式,用户直接找工厂生产一系列产品(零件)。
原文:https://www.cnblogs.com/Carol-Xu/p/12003371.html