一,案例引入
盖房项目需求
1.需要建造房子,这一过程为打桩,砌墙,封顶
2.房子有各种各样的,比如普通房,高楼,别墅,各种房子虽然建造过程一样,但是要求不同
二,传统方式解决
1.代码
AbstractHouse
package 设计模式.建造者模式.传统方式;
public abstract class AbstractHouse {
abstract void buildBasic();
abstract void buildWall();
abstract void buildTop();
public void buildHouse(){
buildBasic();
buildWall();
buildTop();
}
}
Highhouse
package 设计模式.建造者模式.传统方式;
public class HighHouse extends AbstractHouse {
@Override
void buildBasic() {
System.out.println("高楼地基");
}
@Override
void buildWall() {
System.out.println("高楼建墙");
}
@Override
void buildTop() {
System.out.println("高楼封顶");
}
}
CommenHouse
package 设计模式.建造者模式.传统方式;
public class CommenHouse extends AbstractHouse{
@Override
void buildBasic() {
System.out.println("普通房子地基");
}
@Override
void buildWall() {
System.out.println("普通房子建墙");
}
@Override
void buildTop() {
System.out.println("普通房子封顶");
}
}
Client
package 设计模式.建造者模式.传统方式;
public class Client {
public static void main(String []args){
CommenHouse commenHouse=new CommenHouse();
commenHouse.buildHouse();
HighHouse highHouse=new HighHouse();
highHouse.buildHouse();
}
}
2.分析
优点:容易理解,好实现
缺点:扩展性差,难以维护,将产品和创建产品的过程封装在一起,耦合性较强
解决方案:将产品和产品创建过程分开---->建造者模式
三,建造者模式
1.建造者模式:又称为生成器模式,是一种对象构件模式他可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同的对象
2.重视过程,轻视细节
3.代码
House
package 设计模式.建造者模式.Impprove;
public class House {
private String basic;
private String wall;
private String top;
public String getTop() {
return top;
}
public void setTop(String top) {
this.top = top;
}
public String getWall() {
return wall;
}
public void setWall(String wall) {
this.wall = wall;
}
public String getBasic() {
return basic;
}
public void setBasic(String basic) {
this.basic = basic;
}
}
HouseBuilder:负责不同房子的建造
package 设计模式.建造者模式.Impprove;
public abstract class HouseBuilder {
protected House house=new House();
public abstract void buildBasic();
public abstract void buildWall();
public abstract void buildTop();
public House buildHouse(){
return house;
}
}
HighBuilding
package 设计模式.建造者模式.Impprove;
public class HighBuilding extends HouseBuilder {
@Override
public void buildBasic() {
System.out.println("高楼地基");
}
@Override
public void buildWall() {
System.out.println("高楼墙壁");
}
@Override
public void buildTop() {
System.out.println("高楼屋顶");
}
}
CommenBulding
package 设计模式.建造者模式.Impprove;
public class CommenBuilding extends HouseBuilder {
@Override
public void buildBasic() {
System.out.println("普通房子地基");
}
@Override
public void buildWall() {
System.out.println("普通房子墙壁");
}
@Override
public void buildTop() {
System.out.println("普通房子屋顶");
}
}
HouseDirector:实现具体的建房过程
package 设计模式.建造者模式.Impprove;
//指挥者:动态指定制作流程
public class HouseDirector {
HouseBuilder houseBuilder=null;
public HouseDirector(HouseBuilder houseBuilder){
this.houseBuilder=houseBuilder;
}
//将建造房子的过程交给指挥着
public House constructHouse(){
houseBuilder.buildBasic();
houseBuilder.buildWall();
houseBuilder.buildTop();
return houseBuilder.buildHouse();
}
}
Client
package 设计模式.建造者模式.Impprove;
import 设计模式.建造者模式.传统方式.CommenHouse;
public class Client {
public static void main(String []args){
CommenBuilding commenBuilding=new CommenBuilding();
HouseDirector houseDirector=new HouseDirector(commenBuilding);
houseDirector.constructHouse();
}
}