创建型模式--建造者模式

一、基本介绍

建造者模式是一种对象的构建模式,他可以将复杂对象的创建过程抽象出来

二、建造者的角色

  1. Product(产品):具体产品对象
  2. Builder(抽象建造者):创建product对象各个部件的接口/抽象类
  3. ConcreteBuilder(具体建造者):实现抽象建造者的抽象方法,有具体的建造方法
  4. Director(指挥者):依赖一个使用Builder接口的对象,用于创建一个复杂的对象;两个作用:隔离了 客户与对象的生产过程;负责控制产品对象的生产过程。

三、建造者模式类图

建造者模式类图

四、建造者模式-建房子例子

步骤一:创建产品类-一个房子类

public class House {

    private String basic;//地基

    private String wall;//墙

    private String roofed;//屋顶

    public String getBasic() {
        return basic;
    }

    public void setBasic(String basic) {
        this.basic = basic;
    }

    public String getWall() {
        return wall;
    }

    public void setWall(String wall) {
        this.wall = wall;
    }

    public String getRoofed() {
        return roofed;
    }

    public void setRoofed(String roofed) {
        this.roofed = roofed;
    }
}

步骤二:创建抽象建造者

/**
* @Date: 2022/7/21
* @Desc: 抽象构造者
**/
public abstract class HouseBuilder {

   private House house = new House();

   //建造流程的抽象方法
   public abstract HouseBuilder buildBasic();

   public abstract HouseBuilder buildWalls();

   public abstract HouseBuilder buildRoofed();

   public House build(){
       return house;
   }

}

步骤三:创建具体建造者

/**
 * @Date: 2022/7/21
 * @Desc: 普通房子(具体建造者)
 **/
public class CommonHouseBuilder extends HouseBuilder{

    @Override
    public HouseBuilder buildBasic() {
        System.out.println("普通房子地基2米");
        return this;
    }

    @Override
    public HouseBuilder buildWalls() {
        System.out.println("普通房子墙厚0.4米");
        return this;
    }

    @Override
    public HouseBuilder buildRoofed() {
        System.out.println("普通房子屋顶");
        return this;
    }
}

步骤四:创建指导类

/**
 * @Date: 2022/7/21
 * @Desc: 建造指挥者
 **/
public class HouseDirector {

    HouseBuilder houseBuilder = null;

    public HouseDirector(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    public void setHouseBuilder(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    public House constructHouse(){
        House house = houseBuilder.buildBasic()
                .buildRoofed()
                .buildWalls()
                .build();
        return house;
    }
}

最后使用

public class Client {

    public static void main(String[] args) {
        CommonHouseBuilder commonHouseBuilder = new CommonHouseBuilder();
        HouseDirector director = new HouseDirector(commonHouseBuilder);
        director.constructHouse();//建造房子
    }
}

五、总结

  1. 客户端不需要知道产品内部的组成细节,将产品本身和创建过程解耦,使用相同的创建过程可以创建不同的产品对象
  2. 建造者模式适合产品建造过程相同,如果产品之间差异过大不适合建造者模式;
  3. 每个建造者都是独立的;增加新的具体建造者无需修改原有库代码,系统扩展方便,符合” 开闭原则“
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容