(5)设计模式之建造者模式(创建型模式)

声明:以下都是博主浅薄的经验之谈,欢迎大家学习交流

  • 先看类图

这里写图片描述

  • 客户端代码
    • Main.java
public class Main {

    public static void main(String[] args) {
        /**引入建造者模式的场景**/
        /**1.客户端创建房子最普通方式是如下,如果每次要创建不同的房子的话,就必须类似这样进行创建*/
        /**缺点:客户端的代码要不断的动,不利于维护**/
        House house = new House();
        house.setFloor("普通地板");
        house.setWall("普通墙");
        house.setRoof("普通房顶");
        House h1 = new House();
        h1.setFloor("中等地板");
        h1.setWall("中等墙");
        h1.setRoof("中等房顶");
        /**2.增加了一个建造房子的工程队**/
        /**缺点:**/

        HouseBuilder commonBuilder = new CommonBuilder();
        commonBuilder.makeFloor();
        commonBuilder.makeRoof();
        commonBuilder.makeWall();
        House h2 = commonBuilder.getHouse();
        System.out.println(h2);

        /**3.增加一个管理者(指导工程队进行设计)【引入建造者模式】**/
        /**对于后期如果要创建一个中等房子的话,只需要实现houseBuilder接口,创建出一个     
        MediumBuilderm,交给designer即可**/
        /**分离了在客户端代码中去创建不同类别的House对象,代码数量动得少了**/
        Designer designer = new Designer();
        HouseBuilder builder = new CommonBuilder();
        designer.designHouse(builder);
        House h3 = builder.getHouse();
        System.out.println(h3);
        ///
        HouseBuilder mediumBuilder = new MediumBuiler();
        designer.designHouse(mediumBuilder);
        House h4 = mediumBuilder.getHouse();
        System.out.println(h4);

    }


}
  • House.java
public class House {
    private String floor;
    private String wall;
    private String roof;
    public String getFloor() {
        return floor;
    }
    public void setFloor(String floor) {
        this.floor = floor;
    }
    public String getWall() {
        return wall;
    }
    public void setWall(String wall) {
        this.wall = wall;
    }
    public String getRoof() {
        return roof;
    }
    public void setRoof(String roof) {
        this.roof = roof;
    }
    @Override
    public String toString() {
        return "House [floor=" + floor + ", wall=" + wall + ", roof=" + roof + "]";
    }

}
  • HouseBuilder.java
public interface HouseBuilder {
    public void makeFloor();
    public void makeRoof();
    public void makeWall();
    public House getHouse();
}
  • CommonBuilder.java
public class CommonBuilder implements HouseBuilder{
    private House house = new House();
    @Override
    public void makeFloor() {
        house.setFloor("普通地板");
    }

    @Override
    public void makeRoof() {
        house.setRoof("普通房顶");
    }

    @Override
    public void makeWall() {
        house.setWall("普通墙壁");
    }
    /**
     * 得到房子
     * @return
     */
    public House getHouse(){
        return house;
    }

}
  • MediumBuiler.java
public class MediumBuiler implements HouseBuilder {
    private House house = new House();
    @Override
    public void makeFloor() {
        house.setFloor("中等地板");
    }

    @Override
    public void makeRoof() {
        house.setRoof("中等房顶");
    }

    @Override
    public void makeWall() {
        house.setWall("中等墙");
    }

    @Override
    public House getHouse() {
        return house;
    }

}
  • Designer.java
/**
 * 描述:设计者里管理工程队来进行建造房子
 */
public class Designer {

public void designHouse(HouseBuilder houseBuilder){
    houseBuilder.makeFloor();
    houseBuilder.makeRoof();
    houseBuilder.makeWall();
}
}

声明:以上都是博主浅薄的经验之谈,欢迎大家学习交流

猜你喜欢

转载自blog.csdn.net/JavaMrZhang/article/details/72235935