您的位置:首页 > 其它

设计模式之建造者模式

2017-10-23 17:47 369 查看
定义:

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

角色

在这样的设计模式中,有以下几个角色:

1、Builder:为创建一个产品对象的各个部件指定抽象接口。

2、ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。

3、Director:构造一个使用Builder接口的对象,指导构建过程。

4、Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

下面我们来看看建造一个变形金刚的过程:

1:建造变形金刚的头部

2:建造变形金刚的身子

3:建造变形金刚的腿

因为变形金刚有很多种类,我们今天造大黄蜂和擎天柱。

首先,我们来画一个图来表示一下:



然后我们给出代码:

builder接口:

package Builder;

public interface Builder {
void createHead();
void createBody();
void createFoot();
Robot createRobot();
}


package Builder;
//大黄蜂builder
public class AnatomyBuilder implements Builder {
Robot robot;
public  AnatomyBuilder() {
robot = new DHFRobot();
}
public void createHead() {
robot.setHead("建造大黄蜂的头");
}
public void createBody() {
robot.setBody("建造大黄蜂的身体");
}
public void createFoot() {
robot.setFoot("建造大黄蜂的脚");
}
public Robot createRobot() {
return robot;
}

}


package Builder;
//擎天柱builder
public class OptimusPrimeBuilder implements Builder {
Robot robot;
public OptimusPrimeBuilder() {
robot = new QTZRobot();
}
public void createHead() {
robot.setHead("建造擎天柱的头");
}

public void createBody() {
robot.setBody("建造擎天柱的身子");
}

public void createFoot() {
robot.setFoot("建造擎天柱的脚");
}

public Robot createRobot() {
return robot;
}

}


package Builder;
//机器人产品
public class Robot {
public String Head;
public String Body;
public String Foot;

public Robot() {}

public String getHead() {
return Head;
}
public void setHead(String head) {
Head = head;
}
public String getBody() {
return Body;
}
public void setBody(String body) {
Body = body;
}
public String getFoot() {
return Foot;
}
public void setFoot(String foot) {
Foot = foot;
}
}


package Builder;
//大黄蜂机器人
public class DHFRobot extends Robot{
public DHFRobot() {
System.out.println("建造了大黄蜂");
}

}


package Builder;
//擎天柱机器人
public class QTZRobot extends Robot{
public QTZRobot(){
System.out.println("建造了擎天柱");
}
}


package Builder;
//指导构建过程类
public class Director {
public Robot buildRobot(Builder builder) {
builder.createHead();
builder.createBody();
builder.createFoot();
return builder.createRobot();
}
}


package Builder;
//test方法
public class test {
public static void main(String[] args) {
Director dr= new Director();
Robot QTZRobot = dr.buildRobot(new OptimusPrimeBuilder());
Robot DHFRobot = dr.buildRobot(new AnatomyBuilder());
}

}


过程:

—>new一个指导构建director实例

—>dr调用指导类方法

—>buildRobot(new一个需要创建的机器人builder(在new的时候该Builder的构造函数new对应的机器人实例))

—>buildRobot方法连续调用对应机器人Builder的create方法为我们的机器人实例赋值—>最后调用createRobot返回这个实例。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: