建造者模式

建造者模式

优缺点分析

代码演示

最原始的代码
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类图好好学习,编码的时候思考下各种依赖关系的传递,这样进步的更加快!

全部评论

相关推荐

菜菜咪:1. 可以使用简历网站的模版,美观度会更好一点 2. 邮箱可以重新申请一个,或者用qq邮箱的别名,部分hr可能会不喜欢数字邮箱 3. 项目经历最好分点描述,类似的项目很多,可以参考一下别人怎么写的 4. 自我评价可加可不加,技术岗更看重技术。最后,加油,优秀士兵
点赞 评论 收藏
分享
10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务