首页 > 代码库 > 建造者模式(屌丝专用)

建造者模式(屌丝专用)

屌丝有了钱只是用来花的,那得有些霸气一点的房子吧!

意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

适用性:

1、房子有不同的几个部分,能独立的安装

2、希望能建造出多个不同表象的房子

大家先看个类图


1.Builder

为创建一个Product对象的各个部件指定抽象接口。

2.ConcreteBuilder

实现Builder的接口以构造和装配该产品的各个部件。

定义并明确它所创建的表示。

提供一个检索产品的接口。

3.Director

构造一个使用Builder接口的对象。

4.Product

表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。

包含定义组成部件的类,包括将这些部件装配成最终产品的接口。


现在要建的是房子House,有个喜欢的家。

package creatingtype.builder;

/*
 * 房子
 */
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;
    }

}

预定工程队(不同的工程队建不同的房子)

package creatingtype.builder;

/*
 * 工程队
 */
public interface HouseBuilder {

    //建造地板
    public void makeFloor();

    //建造墙
    public void makeWall();

    //建造屋顶
    public void makeHousetop();

    public House getHouse();
}

找个负责人

package creatingtype.builder;

public class HouseDirector {

    public void makeHouse(HouseBuilder builder) {
        //建造地板
        builder.makeFloor();
        //建造墙
        builder.makeWall();
        //建造屋顶
        builder.makeHousetop();
    }

}
负责人有了,如果你想建造别墅,确定别墅工程队

package creatingtype.builder;

/*
 * 别墅工程队
 */
public class BieShuBuilder implements HouseBuilder {

    House house = new House();

    public void makeFloor() {
        house.setFloor("别墅-->地板");
    }

    public void makeHousetop() {
        house.setHousetop("别墅-->房顶");
    }

    public void makeWall() {
        house.setWall("别墅-->墙");
    }

    public House getHouse() {
        return house;
    }

}
负责人有了,如果你想建造豪宅,确定豪宅工程队

package creatingtype.builder;

/*
 * 豪宅工程队
 */
public class HaoZhaiBuilder implements HouseBuilder {

    House house = new House();

    public House getHouse() {
        return house;
    }

    public void makeFloor() {
        house.setFloor("豪宅-->地板");
    }

    public void makeHousetop() {
        house.setHousetop("豪宅-->房顶");
    }

    public void makeWall() {
        house.setWall("豪宅-->墙");
    }

}
都好了,你可以开始修建自己想要的家了。

package creatingtype.builder;

// 建造者模式
public class MainClass {

    //    Builder模式也叫建造者模式或者生成器模式,
    //    是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来
    //    隐藏复合对象的创建过程,它把复合对象的创建
    //    过程加以抽象,通过子类继承和重载的方式,动
    //    态地创建具有复合属性的对象。

    public static void main(String[] args) {
        //工程队
        HouseBuilder builder = new HaoZhaiBuilder();
        //设计者
        HouseDirector director = new HouseDirector();
        director.makeHouse(builder);

        House house = builder.getHouse();
        System.out.println(house.getFloor());
        System.out.println(house.getWall());
        System.out.println(house.getHousetop());
    }

}

就这么简单,豪宅好了,你也可以建别墅哦!