learning之建造者模式

建造者模式:是将一个复杂的对象的构建与它的内部表示分离,使得同样的构建过程可以创建不同的表示。建造模式是对象的创建模式。

如白宫和酒店的建造,基本构建流程一致,如包括打地基、房间主体、装修三个步骤,那么可以将同样的构建过程抽象出来,根据具体建造对象不同表示来完成建造对象。


建造者模式有如下几个角色:

抽象建造者(Builder)角色:抽象出建造流程的规范。
  具体建造者(ConcreteBuilder)角色:具体创建对象或产品的实施者。具体建造者类必须实现这个Builder接口所要求的两种方法:一种是建造方法(buildPart1和 buildPart2),另一种是返还结构方法(retrieveResult)。
  导演者(Director)角色:调用具体建造者角色以创建产品对象。
  产品(Product)角色:产品便是建造中的复杂对象。一个系统中可能会有多个产品类,而且这些产品类并不一定有共同的接口,而完全可以是不相关联的。


图片来自网络:



实例如下:

//builder角色,负责规范建造流程
public interface HouseBuilder {
    public void buildGround();//打地基
    public void buildRoom();//建造房屋主体
    public void buildDecoration();//装修

    House buildHouse();//返回建造对象
}

//白宫具体建造者
public class WhileHouse implements HouseBuilder{
    House house;

    public WhileHouse(House house) {
        this.house = house;
    }

    @Override
    public void buildGround() {
        house.setGround("white house ground");
    }

    @Override
    public void buildRoom() {
        house.setRoom("white house room");
    }

    @Override
    public void buildDecoration() {
        house.setDecoration("white house decorate");
    }

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

//酒店具体建造者
public class Hotel implements HouseBuilder{
    House house;

    public Hotel(House house) {
        this.house = house;
    }

    @Override
    public void buildGround() {
        house.setGround("hotel ground");
    }

    @Override
    public void buildRoom() {
        house.setRoom("hotel room");
    }

    @Override
    public void buildDecoration() {
        house.setDecoration("hotel decorate");
    }

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


//具体对象
public class House {
    private String ground;
    private String room;
    private String decoration;

    public String getGround() {
        return ground;
    }

    public void setGround(String ground) {
        this.ground = ground;
    }

    public String getRoom() {
        return room;
    }

    public void setRoom(String room) {
        this.room = room;
    }

    public String getDecoration() {
        return decoration;
    }

    public void setDecoration(String decoration) {
        this.decoration = decoration;
    }
}


//建筑师导演,根据不同具体builder来生成不同表示,返回具体建造对象或产品
public class MechanicDirector {
    public House build(HouseBuilder houseBuilder){
        houseBuilder.buildGround();
        houseBuilder.buildRoom();
        houseBuilder.buildDecoration();
        return houseBuilder.buildHouse();
    }
}

//示例生成不同对象代码
public class Test {
    public static void main(String[] args) {
        MechanicDirector mechanicDirector=new MechanicDirector();
        House whieHouse=mechanicDirector.build(new WhileHouse(new House()));
        House hotel=mechanicDirector.build(new Hotel(new House()));
    }
}

工厂模式关注的是创建单个产品,而建造者模式则关注创建复杂对象,具有多个不同属性的对象。具体看情况使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值