Java设计模式---建造者模式

建造者模式是将一个产品的属性与其制造的过程分开,因为不同产品的制造过程可能不一样,需要定制化。

具体代码呢,以建造房子为例子,见如下:

1、明确需要的产品:

// 我们只对产品进行属性定义 不做行为定义
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;
    }
}

2、抽象制造该产品的类:

//抽象具体产品的构建过程
public abstract class HouseBuilder {

    protected House house = new House();
   public abstract void buildBasic();
   public abstract void buildWall();
   public abstract void buildRoof();

   public House buildHouse(){
       return house;
   }

}

3、指挥者聚合建造者:

public class HouseDirector {
    //聚合抽象的建造者
    HouseBuilder houseBuilder = null;
    //通过构造器传入

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

    public House constructHouse(){
        houseBuilder.buildBasic();
        houseBuilder.buildRoof();
        houseBuilder.buildWall();
        return houseBuilder.buildHouse();
    }

}

4、不同类型的房子:

//普通房子的要求
public class CoommonHouse extends HouseBuilder{
    @Override
    public void buildBasic() {
        System.out.println("普通房地基5米");
    }

    @Override
    public void buildWall() {
        System.out.println("普通房砌墙0.5米");
    }

    @Override
    public void buildRoof() {
        System.out.println("普通房盖顶");
    }
}
//高楼的标准
public class HighHouse extends HouseBuilder{
    @Override
    public void buildBasic() {
        System.out.println("高楼地基");
    }

    @Override
    public void buildWall() {
        System.out.println("高楼砌墙");
    }

    @Override
    public void buildRoof() {
        System.out.println("高楼盖顶");
    }
}

测试如下:

public class HouseTest {
    public static void main(String[] args) {


        House h1 = new HouseDirector(new CoommonHouse()).constructHouse();
        House h2 = new HouseDirector(new HighHouse()).constructHouse();

    }
}

结果如下:

普通房地基5米
普通房盖顶
普通房砌墙0.5米
高楼地基
高楼盖顶
高楼砌墙

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值