本文介绍了建造者模式并附有 java 代码实现 demo. 内容仅供参考使用, 有不足之处请及时指出, 也欢迎大家交流探讨.
建造者模式
建造者模式是创建型模式的一种, 其隐藏了构建对象的具体过程.
场景
假设你需要一座房子, 而建造房子需要很多流程, 很多工作, 但你并不需要关心这些, 你只需将你想要的房子告诉承包商即可, 承包商会将房子建设好. 这种场景可以使用建造者模式.
示例
假设房子由地基, 框架, 墙体, 顶部构成.
- public class House {
- private String base;
- private String frame;
- private String wall;
- private String top;
- public String getBase() {
- return base;
- }
- public void setBase(String base) {
- this.base = base;
- }
- public String getFrame() {
- return frame;
- }
- public void setFrame(String frame) {
- this.frame = frame;
- }
- public String getWall() {
- return wall;
- }
- public void setWall(String wall) {
- this.wall = wall;
- }
- public String getTop() {
- return top;
- }
- public void setTop(String top) {
- this.top = top;
- }
- @Override
- public String toString() {
- return "House{" +
- "base='" + base + '\'' +
- ", frame='" + frame + '\'' +
- ", wall='" + wall + '\'' +
- ", top='" + top + '\'' +
- '}';
- }
- }
房子建造抽象类
- abstract class HouseBuilder {
- protected House house = new House();
- public abstract void buildBase();
- public abstract void buildFrame();
- public abstract void buildWall();
- public abstract void buildTop();
- }
平房建造类
- public class BungalowHouseBuilder extends HouseBuilder {
- @Override
- public void buildBase() {
- house.setBase("平房地基");
- }
- @Override
- public void buildFrame() {
- house.setFrame("平房框架");
- }
- @Override
- public void buildWall() {
- house.setWall("平房墙体");
- }
- @Override
- public void buildTop() {
- house.setTop("平房顶部");
- }
- }
别墅建造类
- public class VillaHouseBuilder extends HouseBuilder {
- @Override
- public void buildBase() {
- house.setBase("别墅地基");
- }
- @Override
- public void buildFrame() {
- house.setFrame("别墅框架");
- }
- @Override
- public void buildWall() {
- house.setWall("别墅墙体");
- }
- @Override
- public void buildTop() {
- house.setTop("别墅顶部");
- }
- }
房屋建造导演类
- public class HouseBuildDirector {
- private HouseBuilder houseBuilder;
- public HouseBuildDirector(HouseBuilder houseBuilder) {
- this.houseBuilder = houseBuilder;
- }
- public House buildHose() {
- houseBuilder.buildBase();
- houseBuilder.buildFrame();
- houseBuilder.buildWall();
- houseBuilder.buildTop();
- return houseBuilder.house;
- }
- }
告知承包商建造一座平房.
- BungalowHouseBuilder bungalowHouseBuilder = new BungalowHouseBuilder();
- HouseBuildDirector houseBuildDirector = new HouseBuildDirector(bungalowHouseBuilder);
- House house = houseBuildDirector.buildHose();
- System.out.println(house.toString());
输出
House{base='平房地基', frame='平房框架', wall='平房墙体', top='平房顶部'}
建造者模式结构
建造者模式主要分为 Builder 和 Director 两大模块.
Builder 负责构建各个模块.
Director 负责组建各个模块.
来源: http://www.jianshu.com/p/c06289276fd8