一、 问题描述
画出两个小人:一个瘦人、一个胖人。小人要画头、身体、双手、双腿。
二、 完成如下题目要求
-
画出静态图
-
写出采用该设计模式的好处
客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得创建的过程可以创建不同的产品对象。
每个具体的建造者都相对独立而与其他的具体建造者无关。 将复杂的产品的创建步骤分解在不同的方法中,使得创建过程更加清晰
符合开闭原则
- 编写代码
package builder;
public class Client {
public static void main(String[] args) {
System.out.println("画一个瘦人");
PersonThinBuilder personThinBuilder=new PersonThinBuilder();
PersonDirector personDirector=new PersonDirector(personThinBuilder);
personDirector.createPerson();
System.out.println("========================");
System.out.println("画一个胖人");
PersonFatBuilder personFatBuilder=new PersonFatBuilder();
personDirector.setPersonBuilder(personFatBuilder);
personDirector.createPerson();
}
}
package builder;
/**
* 画一个人所需要属性
* @author Sakura
*
*/
public class Person {
private String head;
private String body;
private String leftArm;
private String righArm;
private String leftLeg;
private String rightLeg;
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getLeftArm() {
return leftArm;
}
public void setLeftArm(String leftArm) {
this.leftArm = leftArm;
}
public String getRighArm() {
return righArm;
}
public void setRighArm(String righArm) {
this.righArm = righArm;
}
public String getLeftLeg() {
return leftLeg;
}
public void setLeftLeg(String leftLeg) {
this.leftLeg = leftLeg;
}
public String getRightLeg() {
return rightLeg;
}
public void setRightLeg(String rightLeg) {
this.rightLeg = rightLeg;
}
}
package builder;
/**
* 抽象方法
* @author Sakura
*
*/
public abstract class PersonBuilder {
Person person=new Person();
public abstract void buildHead();
public abstract void buildBody();
public abstract void buildLeftArm();
public abstract void buildRightArm();
public abstract void buildLeftLeg();
public abstract void buildRightLeg();
public Person build() {
return person;
}
}
package builder;
/**
* 胖人的具体实现
* @author Sakura
*
*/
public class PersonFatBuilder extends PersonBuilder{
@Override
public void buildHead() {
// TODO Auto-generated method stub
System.out.println("画一个大头");
}
@Override
public void buildBody() {
// TODO Auto-generated method stub
System.out.println("画一个大身体");
}
@Override
public void buildLeftArm() {
// TODO Auto-generated method stub
System.out.println("画一个左大胳膊");
}
@Override
public void buildRightArm() {
// TODO Auto-generated method stub
System.out.println("画一个右大胳膊");
}
@Override
public void buildLeftLeg() {
// TODO Auto-generated method stub
System.out.println("画一个左大腿");
}
@Override
public void buildRightLeg() {
// TODO Auto-generated method stub
System.out.println("画一个右大腿");
}
}
package builder;
/**
* 瘦人的具体实现
* @author Sakura
*
*/
public class PersonThinBuilder extends PersonBuilder{
@Override
public void buildHead() {
// TODO Auto-generated method stub
System.out.println("画一个小头");
}
@Override
public void buildBody() {
// TODO Auto-generated method stub
System.out.println("画一个小身体");
}
@Override
public void buildLeftArm() {
// TODO Auto-generated method stub
System.out.println("画一个左小胳膊");
}
@Override
public void buildRightArm() {
// TODO Auto-generated method stub
System.out.println("画一个右小胳膊");
}
@Override
public void buildLeftLeg() {
// TODO Auto-generated method stub
System.out.println("画一个左小腿");
}
@Override
public void buildRightLeg() {
// TODO Auto-generated method stub
System.out.println("画一个右小腿");
}
}package builder;
/**
* 指挥者
* @author Sakura
*
*/
public class PersonDirector {
PersonBuilder personBuilder =null;
//构造方法
public PersonDirector(PersonBuilder personBuilder) {
// TODO Auto-generated constructor stub
this.personBuilder=personBuilder;
}
//set方法
public void setPersonBuilder(PersonBuilder personBuilder) {
this.personBuilder=personBuilder;
}
public Person createPerson() {
personBuilder.buildHead();
personBuilder.buildBody();
personBuilder.buildLeftArm();
personBuilder.buildRightArm();
personBuilder.buildLeftLeg();
personBuilder.buildRightLeg();
return personBuilder.build();
}
}