建造者模式
建造者模式
优缺点分析
代码演示
最原始的代码
public class CommonHouce extends Houce {
@Override
public void buildBasic() {
System.out.println("普通房子打地基");
}
@Override
public void buildWall() {
System.out.println("普通房子砌墙");
}
@Override
public void proofed() {
System.out.println("普通房子盖房顶");
}
}
public abstract class Houce {
public abstract void buildBasic();
public abstract void buildWall();
public abstract void proofed();
/*因为这三个方法有先后顺序,所以可以用一个方法包进去*/
public void build(){
buildBasic();
buildWall();
proofed();
}
}
public class Client {
public static void main(String[] args) {
CommonHouce commonHouce = new CommonHouce();
commonHouce.build();
/*产品与生产产品的过程耦合在一起,不好,这里加一个缓冲层,就是建造者模式*/
}
}
优化过程
构造者模式,是一种对象构造模式。他可以将复杂对象的构造过程抽象出来,使得抽象过程的不同实现方法可以构造出不同的表现
它允许用户之通过制定复杂对象的类型和内容就可以构造他们,用户不需要知道内部的具体构造细节
建造者模式的四个角色:Product Builder ConcreteBuilder Director
指挥者的作用有两个:一个是隔离客户与对象的生产过程 一个是负责控制产品对象的生产过程。
public class House {
/*此处为产品类*/
private String name;
private int money;
@Override
public String toString() {
return "House{" +
"name='" + name + '\'' +
", money=" + money +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
public abstract class HouseBuild {
/*抽象的类,用来封装各种建房子的方法*/
private House house = new House();
public abstract void buildBasic();
public abstract void buildWall();
public abstract void proofed();
/*给出返回房子的方法*/
public House giveHouse(){
return house;
}
}
package builder.improve;
import builder.House;
/*普通房子继承了建造房子,则有自己独有的建造过程*/
public class CommonHouse extends HouseBuild {
@Override
public void buildBasic() {
System.out.println("普通房子打地基");
}
@Override
public void buildWall() {
System.out.println("普通房子砌墙");
}
@Override
public void proofed() {
System.out.println("普通房子盖房顶");
}
}
public class DesignHouse {
/*与建造房子依赖关系*/
HouseBuild houseBuild=null;
/*这里传入的是抽象类,但是我们在客户端可以直接写具体的实现类,这样的好处很多
* 可扩展性更强*/
public DesignHouse(HouseBuild houseBuild){
this.houseBuild=houseBuild;
}
public House getHouse(){
houseBuild.buildBasic();
houseBuild.buildWall();
houseBuild.proofed();
return houseBuild.giveHouse();
}
}
package builder.improve;
public class Client {
public static void main(String[] args) {
CommonHou***monHouse = new CommonHouse();
DesignHouse designHouse = new DesignHou***monHouse);
designHouse.getHouse();
/*需求更改后。例如要建立一个豪宅*/
/*新增一个豪宅房子,其他都不改变*/
BigHouse bigHouse = new BigHouse();
DesignHouse designHouse1 = new DesignHouse(bigHouse);
designHouse1.getHouse();
House house = new House();
house.setName("主题房子");
house.setMoney(123333);
}
}
适用情景以及源码解析
StringBuilder里面利用到建造者模式
总结
UML类图好好学习,编码的时候思考下各种依赖关系的传递,这样进步的更加快!
查看10道真题和解析