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

2014-11-24 03:00:28 · 作者: · 浏览: 2
假如我们需要建造一个房子,并且我们也不知道如何去建造房子,所以就去找别人帮我们造房子
第一步:
新建一个房子类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.getHo