首页 > 其他分享 >十:建造者模式:组装的智慧

十:建造者模式:组装的智慧

时间:2023-04-30 14:05:01浏览次数:26  
标签:智慧 String 创建 组装 建造 dessert OrderBuilder public

a. 理解建造者模式

建造者模式是一种创建型设计模式,它可以让我们在不暴露对象创建细节的情况下,逐步构建一个复杂的对象。该模式将对象的构建和表示分离,使得同样的构建过程可以创建出不同的表示。这就像乐高积木,通过不同的组装方式,可以创建出各种各样的作品。

b. 动手实践:建造者模式示例

让我们以一个餐厅订单为例,假设我们要实现一个餐厅的点餐系统。客户可以点汉堡、饮料等不同的食物组合。在这个场景中,我们可以使用建造者模式来完成订单的创建。 首先,我们需要一个抽象的建造者接口:

public interface OrderBuilder {
    OrderBuilder addBurger(String burger);
    OrderBuilder addDrink(String drink);
    OrderBuilder addDessert(String dessert);
    Order build();
}

然后,我们创建一个具体的建造者类实现这个接口:

public class RestaurantOrderBuilder implements OrderBuilder {
    private Order order;

    public RestaurantOrderBuilder() {
        order = new Order();
    }

    @Override
    public OrderBuilder addBurger(String burger) {
        order.setBurger(burger);
        return this;
    }

    @Override
    public OrderBuilder addDrink(String drink) {
        order.setDrink(drink);
        return this;
    }

    @Override
    public OrderBuilder addDessert(String dessert) {
        order.setDessert(dessert);
        return this;
    }

    @Override
    public Order build() {
        return order;
    }
}

接下来,我们创建一个表示订单的类:

public class Order {
    private String burger;
    private String drink;
    private String dessert;

    public void setBurger(String burger) {
        this.burger = burger;
    }

    public void setDrink(String drink) {
        this.drink = drink;
    }

    public void setDessert(String dessert) {
        this.dessert = dessert;
    }

    @Override
    public String toString() {
        return "Order{" +
                "burger='" + burger + '\'' +
                ", drink='" + drink + '\'' +
                ", dessert='" + dessert + '\'' +
                '}';
    }
}

最后,我们在客户端使用建造者模式创建订单:

public class Client {
    public static void main(String[] args) {
        OrderBuilder builder = new RestaurantOrderBuilder();
        Order order = builder.addBurger("Cheeseburger")
                .addDrink("Coca-Cola")
                .addDessert("Ice cream")
                .build();
        System.out.println(order);
    }
}

c. 优缺点剖析:建造者模式的影响

优点:

1、分离了对象的构建和表示,可以独立地改变构建过程和表示,使得代码更易维护。 2、更好的封装性,客户端无需知道对象的创建细节。只需通过建造者提供的接口来构建对象,这降低了系统的耦合度。 3、 建造者模式允许对对象的创建过程进行更细粒度的控制。这对于创建具有多个部分的复杂对象非常有用。

缺点:

1、如果对象的创建过程简单,使用建造者模式可能会导致代码冗余和过于复杂。 2、增加了系统的复杂性,需要额外定义建造者接口和具体建造者类。

d. 建造者模式在开源框架中的应用

在Java的开源框架中,建造者模式同样发挥着重要作用。以Apache HttpClient为例,它是一个广泛使用的HTTP客户端库。在创建HTTP请求时,它使用了建造者模式来构建HttpRequest对象。以下是一个简单的示例:

import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;

import java.net.URI;
import java.net.URISyntaxException;

public class HttpClientExample {
    public static void main(String[] args) throws URISyntaxException {
        URI uri = new URIBuilder()
                .setScheme("https")
                .setHost("www.example.com")
                .setPath("/api/v1/users")
                .setParameter("page", "1")
                .setParameter("size", "10")
                .build();

        HttpGet httpGet = new HttpGet(uri);
        System.out.println(httpGet);
    }
}

在这个例子中,我们使用了URIBuilder类创建一个URI对象。URIBuilder是一个典型的建造者类,它通过提供一系列setter方法来设置URI的不同部分,最后调用build()方法来创建URI对象。这使得创建具有多个参数的URI变得更加灵活和易于管理。 总之,建造者模式在处理复杂对象的创建过程时具有很大的优势。通过分离对象的构建和表示,我们可以更灵活地修改和扩展代码。同时,建造者模式在开源框架中的应用也进一步证明了它在实际项目中的实用性。然而,我们应该在适当的场景下使用建造者模式,避免过度设计和不必要的复杂性。

标签:智慧,String,创建,组装,建造,dessert,OrderBuilder,public
From: https://blog.51cto.com/u_13616584/6237849

相关文章

  • 十二:桥接模式:独立发展的智慧
    a.桥接模式揭示桥接模式是一种结构型设计模式,它的目的是将抽象与实现分离,使得它们可以独立地变化。通过将实现部分和抽象部分独立开来,我们可以更灵活地实现不同的抽象和实现,从而让它们在独立发展的同时保持低耦合。b.动手编程:桥接模式示例假设我们正在设计一个电子设备商店,商......
  • 智慧校园智慧教育大数据平台
    项目解决方案智慧校园基于该学校现状和发展定位,打造“5G+一平台+N应用”智慧校园解决方案,赋能教学、管理和服务升级,打造5G+智慧校园的深度应用场景,助力教育智能化发展。建设目标打造5G教育大数据平台,建设目标:5G教育大数据平台教育智脑统一身份认证一站式服务门户建设5G......
  • 如何基于AI智能技术打造智慧工厂大数据可视化管理平台​
    一、行业背景随着物联网、视频监控和人工智能等技术的快速发展和应用,利用先进技术加强信息管理和服务,是现代工厂信息化发展的新趋势。目前是传统工厂向智慧工厂转型的关键阶段,各工厂急需采用融合智能化和信息化的技术,打造集智能管理、智能生产、智能服务为一体的大数据可视化管理平......
  • ChatGPT + Raksmart云服务器:引领时代的智慧之选
    ChatGPT和Raksmart云服务器是当今互联网行业的两个炙手可热的话题。ChatGPT作为一种先进的自然语言处理技术,可用于许多领域,包括智能客服、智能翻译和自然语言生成等。Raksmart则是一家专注于提供高质量云服务器的美国公司,其服务器拥有高性能、可靠性和安全性等优点。ChatGPT和Raksm......
  • AIRIOT助力城市管廊工程,智慧物联守护城市生命线
    ​随着科技的不断革新,人工智能、大数据、物联网等新一代技术驱动的智慧城市快速发展,众多领域和行业的参随着科技的不断革新,人工智能、大数据、物联网等新一代技术驱动的智慧城市快速发展,众多领域和行业的参与者开始深入智慧城市建设,以自身优势开始推动智慧城市从“建设......
  • 新能源数字化 智慧充电桩三维可视化运维平台
    放眼全球,近十年来,新能源汽车赛道堪称“热得发烫”。伴随着进入成年期的新能源汽车行业对相关配套设备支撑水平的提升,作为其“新基建”的充电桩领域表现更为突出的价值势能。过去,在一系列补贴政策和资本刺激下,充电桩玩家都在跑马圈地抢占市场。建设背景市场背景截至2022年6月底,......
  • TSINGSEE城市“一网统管”平台—智慧平安小区的场景应用
    随着城市建设进程的不断加快,关于城市的智能化治理需求也随之增多。在国家发布的“十四五”规划中,已经明确指出,推进新型城市建设,推行城市运行一网统管。作为推动城市治理体系和治理能力现代化的重要探索,“一网统管”将成为关键基础工程。“一网统管”的本质,是指充分运用大数据、云......
  • 新品首发丨计讯物联5G水利遥测终端机TY511-B3,推动5G+智慧水利再进化
    当前,水利在全面感知、全面互联、智慧应用等方面较其他行业存在明显差距。基于物联网行业通信技术的不断突破和水利行业对高速移动通信的强烈需求,5G移动通信以高速率、大带宽、低时延、广连接等特点让水利数据快速高效地传输成为可能,逐渐成为水利行业高质量发展的重要驱动力量。计......
  • zip函数组装字典和列表
    zip:字面意思就是打包的意思,目的也是打包组装列表:defget_dict(a:list,b:list):d=list(zip(a,b))returndif__name__=='__main__':#print(time_specific())list1=[1,2,3]list2=[4,5,6]print(get_dict(list1,list2))结果:D:\Pyth......
  • 软件杯3D智慧医疗记录1
    2023年4月27日前台搭建框架图  服务器本地已连接可插入框架 展示平台正在连接到本地 问题:yarninstall卡死localhost拒绝连接 ......