建造者模式概念
建造者模式是一种对象构建方式,它可以将复杂的对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同的对象。且构造过程都是相对独立的,流程相同但建造的方法不同,我们先把流程涉及到的类分成四个角色。
建造者四个角色
- Product 产品
- Builder 建造者抽象类
- ConcreateBuilder 具体建造方法类
- Director 产品实现类
建造者角色实现
public class House {
private String base; //地基
private String wall; //墙
public String getBase() {
return base;
}
public void setBase(String base) {
this.base = base;
}
public String getWall() {
return wall;
}
public void setWall(String wall) {
this.wall = wall;
}
}
House:需要建造的产品
/**
* 建造者抽象类
*/
public abstract class HouseBuild {
protected House house = new House();
//建造过程
public abstract void buildBase();
public abstract void buildWall();
//组合建造
public House getHouse() {
return house;
}
}
HouseBuild:产品建造的共性,但是建造方法不同。
/**
* 建造者实现类
* 制造流程与产品分开 解耦
*/
public class HouseBuildImpl extends HouseBuild {
@Override
public void buildBase() {
System.out.println("普通房地基5M");
}
@Override
public void buildWall() {
System.out.println("普通房砌墙10CM");
}
}
/**
* 建造者实现类
*/
public class HighBuildImpl extends HouseBuild {
@Override
public void buildBase() {
System.out.println("高楼地基500M");
}
@Override
public void buildWall() {
System.out.println("高楼砌墙10M");
}
}
两种不同建造抽象实现类,制造流程与产品分开,实现解耦,后续再有产品不同建造方法看来,扩展性较好。
/**
* 指挥者
*/
public class HouseDirector {
HouseBuild houseBuild = null;
// 通过构造器传入或者set注入
public HouseDirector(HouseBuild houseBuild) {
this.houseBuild = houseBuild;
}
public void setHouseBuild(HouseBuild houseBuild) {
this.houseBuild = houseBuild;
}
// 建造者的作用 建造顺序交由指挥者
public House getHouse() {
houseBuild.buildWall(); //先砌墙
houseBuild.buildBase(); //再地基
// 返回建造好的对象
return houseBuild.getHouse();
}
}
指挥建造者: 决定建造某种不同类型产品(构造注入与set注入都可)
public class buildTest {
public static void main(String[] args) {
// 先建造普通
HouseBuildImpl houseBuild = new HouseBuildImpl();
// 构造注入指挥者 告诉指挥者建造什么类型
HouseDirector houseDirector = new HouseDirector(houseBuild);
// 获取完成对象
House house = houseDirector.getHouse();
HighBuildImpl highBuild = new HighBuildImpl();
houseDirector = new HouseDirector(highBuild);
House house1 = houseDirector.getHouse();
}
}
测试类: 告诉指挥者需要建造哪种类型的产品,由指挥者返回产品类型。
小结
建造者模式在产品实现方面隐藏了建造方法,不同种类不同实现,通过实现接口方式实现扩展性好,与原产品解耦。但是适用范围仅仅是产品见共同性要求高,如果产品之间差异性大则不适用于建造者模式。
详细源码下载地址: github.com/Liyinzuo/De…
以上便是建造者模式介绍与实现,如果有错误或者不足地方欢迎指正。