设计模式-建造者模式
1、建造者模式(builder):将一个复杂的对象构造与其表示分离,使得同样的构造过程可以创建不同的表示。其实就是将一个复杂对象分离,也就是解耦,用的时候可以自由组合,实现代码复用。
2、优缺点
优点
- 构造者是独立的,所以容易扩展
- 实现了代码的复用、利于系统解耦
缺点
- 产品的使用范围有限,因为产品的组成必须相同
产品调用入口
package com.example.designpattern.builder;
public class BuilderMain {
public static void main(String[]args)
{
try
{
//第一种房子规格
Builders builders = new SpecificBuilders1();
ProjectManager m = new ProjectManager();
m.buildHouse(builders).show();
//第二种房子规格
builders = new SpecificBuilders2();
m.buildHouse(builders).show();
}
catch (Exception exception){
}
}
}
抽象建筑者
package com.example.designpattern.builder;
public abstract class Builders {
//创建一个房子
protected House house = new House();
public abstract void buildWall();
public abstract void buildFoundation();
public abstract void buildFurniture();
//返回房子对象
public House getHouse() {
return house;
}
}
具体产品
package com.example.designpattern.builder;
public class House {
private String foundation;//地基
private String wall;//墙
private String furniture;//家具
public String getFoundation() {
return foundation;
}
public void setFoundation(String foundation) {
this.foundation = foundation;
}
public String getWall() {
return wall;
}
public void setWall(String wall) {
this.wall = wall;
}
public String getFurniture() {
return furniture;
}
public void setFurniture(String furniture) {
this.furniture = furniture;
}
public void show() {
System.out.println(wall + foundation + furniture);
}
}
项目经理
package com.example.designpattern.builder;
public class ProjectManager {
//产品构建与组装方法
public House buildHouse(Builders builders) {
builders.buildWall();
builders.buildFoundation();
builders.buildFurniture();
return builders.getHouse();
}
}
第一个房子的建造者
package com.example.designpattern.builder;
public class SpecificBuilders1 extends Builders{
@Override
public void buildWall() {
house.setFoundation("12墙");
}
@Override
public void buildFoundation() {
house.setWall("1米");
}
@Override
public void buildFurniture() {
house.setFurniture("半实木");
}
}
第二种房子的建造者
package com.example.designpattern.builder;
public class SpecificBuilders2 extends Builders{
@Override
public void buildWall() {
house.setFoundation("24墙");
}
@Override
public void buildFoundation() {
house.setWall("3米");
}
@Override
public void buildFurniture() {
house.setFurniture("全实木");
}
}