设计模式学习之建造者模式(Builder,创建型模式)(6)

作者:szyuxueliang 和java相关  

假如我们需要建造一个房子,并且我们也不知道如何去建造房子,所以就去找别人帮我们造房子

第一步:

新建一个房子类House,里面有房子该有的属性,我们去找房子建造者接口HouseBuilder,我们要建造一栋平房,就去找PingFangHouseBuilder,该类继承自HouseBuilder,里面有具体建造房子的方法各种方法,比如造地板makeFloor,造墙makeWall等

第二步:

光有会建造房子的人还不行,我们还需要专门的设计师HouseDirector来调用这个建造房子的方法才行

第三步:

客户只知道建造平房,只能 找设计师去调用建造者去建造房子,然后从建造者那里得到房子

代码如下:

House.java

package com.designpattern.builder;

/**
 * 房子类
 * @author yxl
 *
 */
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;
    }
}    

HouseBuilder.java

package com.designpattern.builder;

/**
 * 造房子的建造者,是个抽象的
 * @author yxl
 *
 */
public interface HouseBuilder {
    /**
     * 建造地板
     */
    public void makeFloor();
    /**
     * 建造墙
     */
    public void makeWall();
    /**
     * 建造屋顶
     */
    public void makeHousetop();
    
    public House getHouse();
}

PingFangHouseBuilder.java

package com.designpattern.builder;

public class PingFangHouseBuilder implements HouseBuilder {

    private House house = new House();
    
    
    @Override
    public void makeFloor() {
        house.setFloor("平房建造--地板");
    }

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

    @Override
    public void makeHousetop() {
        house.setHousetop("平房建造--屋顶");
    }
    
    public House getHouse(){
        return house;
    }

}

HouseDirector.java

package com.designpattern.builder;

/**
 * 设计师类
 * @author yxl
 *
 */
public class HouseDirector {
    /**
     * 设计师调用建造者的盖房子方法就行
     * @param houseBuilder
     */
    public void makeHouse(HouseBuilder houseBuilder){
        houseBuilder.makeFloor();
        houseBuilder.makeWall();
        houseBuilder.makeHousetop();
        
    }
}

MainClass.java

package com.designpattern.builder;

public class MainClass {
    public static void main(String[] args) {
        //如果是这种实现方式,那么客户必须知道如何建房子才行,必须知道细节,所以客户就去找人HouseBuilder去建造房子
//        House house = new House();
//        house.setFloor("建造地板");
//        house.setWall("建造墙");
//        house.setHousetop("建造屋顶 ");
//        System.out.println(house.getFloor());
//        System.out.println(house.getWall());
//        System.out.println(house.getHousetop());
        
        
        //这样实现是客户直接找建造者建造房子,客户还必须调用建造者去造房子,这样客户还是必须知道如何造房子才行,
        //所以建造者必须找一个设计师(HouseDirector)来调用建造者的造房子方法
//        HouseBuilder houseBuilder = new PingFangHouseBuilder();
//        houseBuilder.makeFloor();
//        houseBuilder.makeWall();
//        houseBuilder.makeHousetop();
//        House house = houseBuilder.getHouse();
//        System.out.println(house.getFloor());
//        System.out.println(house.getWall());
//        System.out.println(house.getHousetop());
        
        //将调用建造者造房子的方法交给设计师去调用,客户只需要找一个设计师就可以了,等房子造好之后就问建造者去要
        HouseBuilder houseBuilder = new PingFangHouseBuilder();
        HouseDirector houseDirector = new HouseDirector();
        houseDirector.makeHouse(houseBuilder);
        House house = houseBuilder.getHouse();
        System.out.println(house.getFloor());
        System.out.println(house.getWall());
        System.out.println(house.getHousetop());
        
        
    }
}

一、什么是建造者模式

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

二、建造者模式应用场景

- 对象的创建:Builder模式是为对象的创建而设计的模式

- 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象

- 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法

相关资料:

设计模式学习之建造者模式(Builder,创建型模式)(6)来源网络,如有侵权请告知,即处理!

编程Tags: