设计模式:Builder--建造者模式

建造者模式
对象的创建:builder模式是为对象的创建而设计的模式

创建的是一个复合对象,被创建的对象为一个具有复合属性的复合对象。关注对象创建的各个部分创建过程,不同工厂(这里指的是builder生成器)。对产品属性有不同的创建方法。

 

  • 设计师:Director 里面含有建造者Builder的引用,调用builder的方法执行事件
  • Builder接口 :构建者接口,工程师,创建对象的操作都是由这个工程师完成,设计师相当于在一个方法中调用工程师的多个方法建对象
  • ConcreteBuilder类: 实际的工程师:比如平房的工程师和公寓工程师等,是builder的实现类
  • product:需要创建的对象。

 

实例:

创建一个房子house,通过设计师houseDirector调用工程师houseBuilder的方法完成并返回一个房子:代码如下

public class House {
    //地板
    private String floor;
    //墙
    private String wall;
    //屋顶
    private String housetop;

    public String getFloor() {
        return floor;
    }

    public void setFloor(String floor) {
        this.floor = floor;
    }

    public String getWall() {
        return wall;
    }

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

    public String getHousetop() {
        return housetop;
    }

    public void setHousetop(String housetop) {
        this.housetop = housetop;
    }

    @Override
    public String toString() {
        return "House{" +
                "floor='" + floor + '\'' +
                ", wall='" + wall + '\'' +
                ", housetop='" + housetop + '\'' +
                '}';
    }
}

**************************************************************
/**
 * 工程队建房子
 */

public interface HouseBuilder {

    //铺地板
    public void makeFloor();
    //涂墙壁
    public void makeWall();
    //建屋顶
    public void makeHousetop();

    public House getHouse();

}

**************************************************************
公寓工程师
public class GongyuBuilder implements HouseBuilder{

    House house = new House();

    @Override
    public void makeFloor() {
        house.setFloor("公寓-->地板");
    }

    @Override
    public void makeWall() {
        house.setWall("公寓-->墙壁");
    }

    @Override
    public void makeHousetop() {
        house.setHousetop("公寓-->屋顶");
    }

    @Override
    public House getHouse() {
        return house;
    }
}
**************************************************************

/**
 * 平房工程队
 */

public class PingfangBuilder implements HouseBuilder {
    House house = new House();
    @Override
    public void makeFloor() {
        house.setFloor("平房--》地板");
    }

    @Override
    public void makeWall() {
        house.setWall("平房--》墙壁");
    }

    @Override
    public void makeHousetop() {
        house.setHousetop("平房--》屋顶");
    }

    @Override
    public House getHouse() {
        return house;
    }
}

**************************************************************
房子设计师:完成建房子操作
public class HouseDirector {
    HouseBuilder houseBuilder;

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

    public void makeHouse() {
        houseBuilder.makeWall();;
        houseBuilder.makeHousetop();
        houseBuilder.makeFloor();
    }
}

**************************************************************
测试:

public class MainClass {
    public static void main(String[] args) {
        //客户自己建
//        House house = new House();
//        house.setFloor("地板");
//        house.setHousetop("屋顶");
//        house.setWall("墙");

        //工程队建房子
        HouseBuilder builder = new PingfangBuilder();
        builder.makeFloor();
        builder.makeHousetop();
        builder.makeWall();
        House house = builder.getHouse();
        System.out.println(house);

        System.out.println("**************************");

        //设计师来建
//        HouseBuilder ber = new PingfangBuilder();
        GongyuBuilder ber = new GongyuBuilder();
        HouseDirector houseDecrector  = new HouseDirector(ber);
        houseDecrector.makeHouse();
        House house1 = ber.getHouse();
        System.out.println(house1);


    }
}


**************************************************************

输出结果:
House{floor='平房--》地板', wall='平房--》墙壁', housetop='平房--》屋顶'}
**************************
House{floor='公寓-->地板', wall='公寓-->墙壁', housetop='公寓-->屋顶'}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值