搜索内容

有一个问题?

如果您有任何疑问,可以在下面询问或输入您要寻找的!

设计模式-建造者模式(这个吸引眼球的副标题先欠着)

生成海报
唔仄lo咚锵
唔仄lo咚锵 2021-02-06 00:45
阅读需:0

文章内容文件目录

  • 引例
  • 一般打法
  • 建造者模式
  • 建造者模式打法
  • 小结

引例


废话不多说,引出来要求。
要求:修建房屋,修建全过程包含打桩、垒墙和到顶。房屋各种各样,包含农村平房和独栋别墅,程序编写仿真模拟完成。

在这里插入图片描述

一般打法


构思:界定房屋类,包含建房子的方式 ,随后界定农村平房和独栋别墅承继房屋类,重写有关方式 。
类图
在这里插入图片描述

编码

  1. AbstractHouse(房屋)
public abstract class AbstractHouse {
    public abstract void buildBasic();//打桩
    public abstract void buildWalls();//垒墙
    public abstract void buildRoof();//到顶
    public void build() { //建房子
       buildBasic();  //三个流程(留意次序)
       buildWalls();
       buildRoof();
    }
}
  1. Bungalow(农村平房)
public class Bungalow extends AbstractHouse{
    @Override
    public void buildBasic() {
        System.out.println("农村平房打桩");
    }
    @Override
    public void buildWalls() {
        System.out.println("农村平房垒墙");
    }
    @Override
    public void buildRoof() {
        System.out.println("农村平房到顶");
    }
}
  1. Villa (独栋别墅)
public class Villa extends AbstractHouse{
    @Override
    public void buildBasic() {
        System.out.println("独栋别墅打桩");
    }
    @Override
    public void buildWalls() {
        System.out.println("独栋别墅垒墙");
    }
    @Override
    public void buildRoof() {
        System.out.println("独栋别墅到顶");
    }
}
  1. 手机客户端启用
public class Client {
    public static void main(String[] args) {
        Bungalow bungalow = new Bungalow();
        bungalow.build();

        Villa villa = new Villa();
        villa.build();
    }
}

运作結果
在这里插入图片描述
缺陷
程序流程不太好拓展和维护保养,把商品和建立商品全过程封裝在一起,耦合度高。

解耦商品和建立商品全过程=》建造者模式

建造者模式


建造者模式(Builder Pattern)又叫制作器方式,是一种目标搭建方式。它能够将繁杂目标的修建全过程抽象性出去(抽象性类型),使这一抽象性全过程的不一样完成方式 能够结构出不一样主要表现(特性)的目标。

一步一步建立一个繁杂的目标,容许客户只根据特定繁杂目标的种类和內容就可以搭建他们,而不用了解內部的实际搭建关键点。

类图
在这里插入图片描述

  • Product(商品): 实际的商品目标
  • Builder(抽象性建造者): 建立一个商品目标的每个构件特定的插口/抽象类。
  • ConcreteBuilder(实际建造者): 完成插口,搭建和安装每个构件。
  • Director(指挥): 搭建一个应用Builder插口的目标,承担操纵商品目标的生产过程,隔离了顾客与目标的生产过程。

发布反爬信息内容 )时尚博主CSDN详细地址:https://wzlodq.blog.csdn.net/

建造者模式打法


编码

  1. House类(Product商品)
public class House {
    private String baise;
    private String wall;
    private String roof;
}
  1. HouseBuilder类(Builder抽象性建造者)
public abstract class HouseBuilder {
    protected House house = new House();

    //将修建的步骤写好, 抽象性的方式 
    public abstract void buildBasic();
    public abstract void buildWalls();
    public abstract void buildRoof();

    //修建房屋好, 将商品(房屋) 回到
    public House buildHouse() {
        return house;
    }
}

3.Bungalow类(ConcreteBuilder实际建造者A)

public class Bungalow extends HouseBuilder {
    @Override
    public void buildBasic() {
        System.out.println("农村平房打桩");
    }

    @Override
    public void buildWalls() {
        System.out.println("农村平房垒墙");
    }

    @Override
    public void buildRoof() {
        System.out.println("农村平房到顶");
    }
}

4.Villa类(ConcreteBuilder实际建造者B)

public class Villa extends HouseBuilder {
    @Override
    public void buildBasic() {
        System.out.println("独栋别墅打桩");
    }

    @Override
    public void buildWalls() {
        System.out.println("独栋别墅垒墙");
    }

    @Override
    public void buildRoof() {
        System.out.println("独栋别墅到顶");
    }
}

5.HouseDirector类(Director指挥)

public class HouseDirector {
    HouseBuilder houseBuilder = null;

    //构造器传到 houseBuilder
    public HouseDirector(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    //根据setter 传到 houseBuilder
    public void setHouseBuilder(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    //如何处理修建房屋的步骤,交到指挥
    public House constructHouse() {
        houseBuilder.buildBasic();
        houseBuilder.buildWalls();
        houseBuilder.buildRoof();
        return houseBuilder.buildHouse();
    }
}
  1. 手机客户端启用
public class Client {
    public static void main(String[] args) {
        //盖农村平房
        Bungalow commonHouse = new Bungalow();
        //提前准备建立房屋的指挥
        HouseDirector houseDirector = new HouseDirector(commonHouse);
        //进行建房子,回到商品(一般房屋)
        House house = houseDirector.constructHouse();

        System.out.println("--------------------------");
        //盖别墅
        Villa highBuilding = new Villa();
        //重设建造者
        houseDirector.setHouseBuilder(highBuilding);
        //进行建房子,回到商品(高楼大厦)
        houseDirector.constructHouse();
    }
}

运作結果
在这里插入图片描述

小结


  • 手机客户端无须了解商品內部构成的关键点,将商品自身与商品的建立全过程解耦,促使同样的建立全过程能够建立不一样的商品目标。
  • 将繁杂商品的建立流程溶解在不一样的方式 中,促使建立全过程更为清楚。
  • 应用不一样的实际建造者就可以获得不一样的商品目标。
  • 提升新的实际建造者不必改动原来编码。
  • 若商品间的差别非常大,则不宜应用建造者模式。
  • 抽象性工厂模式VS建造者模式
    抽象性工厂模式是对商品大家族的建立,一个商品大家族是一系列商品:具备不一样归类层面的产品组合策略,选用抽象性工厂模式不用关注搭建全过程,只关心什么商品由哪些加工厂生产制造就可以。
    而建造者模式则是规定依照特定的宏伟蓝图修建商品,它的关键目地是根据拼装零配件而造成一个新品。

原創不容易,切勿转截本不富有的浏览量始料不及
时尚博主主页:https://wzlodq.blog.csdn.net/
微信公众平台:唔仄lo咚锵
假如文章内容对您有协助,还记得一键三连❤

评论
  • 消灭零回复