建造者模式
建造者模式的定义
1.定义:将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示
建造者模式的结构图
image-20210318144904456.png
建造者模式的实现
1.代码结构
image-20210318145325920.png
2.调用关系
image-20210318145347617.png
=====代码实现
1.新建一个builder类,并定义抽象方法
package org.example.constructor;
/**
* @author
* @date 2021/3/18 11:22
**/
public abstract class PersonBuilder {
public PersonBuilder(){
}
public abstract void buildHead();
public abstract void buildBody();
public abstract void buildArmLeft();
public abstract void buildArmRight();
public abstract void buildLegLeft();
public abstract void buildLegRight();
}
2.新建二个具体的builder类,继承builder类,并实现其抽象方法
public class PersonFatBuilder extends PersonBuilder {
@Override
public void buildHead() {
System.out.println("fat head");
}
@Override
public void buildBody() {
System.out.println("fat body");
}
@Override
public void buildArmLeft() {
System.out.println("fat arm left");
}
@Override
public void buildArmRight() {
System.out.println("fat arm right");
}
@Override
public void buildLegLeft() {
System.out.println("fat leg left");
}
@Override
public void buildLegRight() {
System.out.println("fat leg right");
}
}
//==========================================================================
public class PersonThinBuilder extends PersonBuilder {
@Override
public void buildHead() {
System.out.println("thin head");
}
@Override
public void buildBody() {
System.out.println("thin body");
}
@Override
public void buildArmLeft() {
System.out.println("thin arm left");
}
@Override
public void buildArmRight() {
System.out.println("thin arm right");
}
@Override
public void buildLegLeft() {
System.out.println("thin leg left");
}
@Override
public void buildLegRight() {
System.out.println("thin leg right");
}
}
3.新建director类,并引用Builder
public class Director {
private PersonBuilder personBuilder;
public Director(PersonBuilder personBuilder){
this.personBuilder=personBuilder;
}
public void createPerson(){
personBuilder.buildHead();
personBuilder.buildBody();
personBuilder.buildArmLeft();
personBuilder.buildArmRight();
personBuilder.buildLegLeft();
personBuilder.buildLegRight();
}
}
4.新建客户端
package org.example.constructor;
/**
* @author
* @date 2021/3/18 11:32
**/
public class Client {
public static void main(String[] args) {
Director director = new Director(new PersonThinBuilder());
director.createPerson();
Director director1 = new Director(new PersonFatBuilder());
director1.createPerson();
}
}
5.运行结果
image-20210318145832437.png
建造者模式的好处
建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要在新建一个具体的建造者就可以了