设计模式笔记----建造者模式

一,案例引入

盖房项目需求

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();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值