Builder 模式中文叫作建造者模式,又叫生成器模式,它属于对象创建型模式,是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。下图是建造者模式的通用类图:
在建造者模式中,有如下4种角色:
Product:产品角色 Builder:抽象建造者,定义产品接口 ConcreteBuilder:具体建造者,实现Builder定义的接口,并且返回组装好的产品 Director:指挥者,属于这里面的老大,你需要生产什么产品都直接找它。建造者模式应用举例
家装
家装不管是精装还是简装,它的流程都相对固定,所以它适用于建造者模式。我们就以家装为例,一起来学习了解一下建造者模式。下图是家装建造者模式简单的 UML 图。
1、家装对象类
/** * 家装对象类 */ public class House { // 买家电 private String jiadian; // 买地板 private String diban; // 买油漆 private String youqi; public String getJiadian() { return jiadian; } public void setJiadian(String jiadian) { this.jiadian = jiadian; } public String getDiban() { return diban; } public void setDiban(String diban) { this.diban = diban; } public String getYouqi() { return youqi; } public void setYouqi(String youqi) { this.youqi = youqi; } @Override public String toString() { return "House{" + "jiadian='" + jiadian + '\'' + ", diban='" + diban + '\'' + ", youqi='" + youqi + '\'' + '}'; } }
2、抽象建造者 Builder 类
/** * 抽象建造者 */ public interface HouseBuilder { // 买家电 void doJiadian(); // 买地板 void doDiBan(); // 买油漆 void doYouqi(); House getHouse(); }
3、具体建造者-简装建造者类
/** * 简装创建者 */ public class JianzhuangBuilder implements HouseBuilder { private House house = new House(); @Override public void doJiadian() { house.setJiadian("简单家电就好"); } @Override public void doDiBan() { house.setDiban("普通地板"); } @Override public void doYouqi() { house.setYouqi("污染较小的油漆就行"); } @Override public House getHouse() { return house; } }
4、具体建造者-精装建造者类
/** * 精装创建者 */ public class jingzhuangBuilder implements HouseBuilder { private House house = new House(); @Override public void doJiadian() { house.setJiadian("二话不说,最好的"); } @Override public void doDiBan() { house.setDiban("二话不说,实木地板"); } @Override public void doYouqi() { house.setYouqi("二话不说,给我来0污染的"); } @Override public House getHouse() { return house; } }