希赛考试网
首页 > 软考 > 软件设计师

建造者模式菜鸟教程

希赛网 2024-06-15 12:56:31

工程师们都知道,软件开发中构建面向对象的模块化程序是非常重要的,这可以帮您随时进行各种维护的信息更改和功能增加。这就是为什么设计模式是一种非常重要的编程实践的原因。在本文中,我们将深入探讨建造者模式。

什么是建造者模式?

在面向对象的编程中,建造者模式是一种创建设计模式,用于创建复杂的对象,该对象可以作为另一个对象的一部分。在某些情况下,创建对象需要进行多个步骤或具有许多相互关联的属性。建造者模式使我们能够步骤化地创建对象,并在每个步骤中实现我们的要求。

建造者模式的优点

建造者模式允许创建复杂对象的过程变得灵活,同时将其构建与表示分离。这是建造者模式的一项主要优点,因为可以更容易地通过改变表示来实现对我们定义的对象的更改。

此外,建造者模式还有以下优点:

1. 管理复杂对象的创建过程和对象表示的分离。

2. 允许在复杂对象中添加类型变量,并保持相同的构建过程。

3. 能够将相似的构建过程重用于其他系统。

4. 容易添加新对象表示和组合组件到现有构建过程中。

建造者模式的组成部分

建造者模式是由四个主要角色组成:产品,抽象建造者,具体建造者和指挥者。让我们看一下每个角色如何协同工作。

1. 产品

产品是我们要创建的复杂对象。它可能由多个部分和子部件组成。产品由很多属性构成,每个属性都可以是必须的或可选的。

2. 抽象建造者

抽象建造者是定义构建过程的接口。它应该可以创建产品的各个部分,并将它们组合成一个可用的产品。抽象建造者应该做出一些重要决策,例如如何设置依赖关系和如何处理不可用的属性。

3. 具体建造者

具体建造者是实现抽象接口的类。具体建造者根据要构建的具体产品的要求定义了一组步骤。它们根据产品的不同要求,使用不同的部件和子部件组合的算法来创建产品。

4. 指挥者

指挥者协调构建过程。它负责创造一个特定的产品,它将具体构建者委托给创建产品。

建造者模式的实现

为了更好地理解建造者模式,我们将实现一个包含具有多个必需属性和可选属性的产品。这个产品是一家餐厅的菜单,其中许多项目可以选择添加,且菜单可能会有所变化。

首先,我们需要定义一个产品,即菜单。这家餐厅的菜单中包含多个不同的菜品,包括名称,描述,价格和其他一些可选属性:

```

public class Menu {

private String name;

private String description;

private double price;

private boolean isVegetarian;

private boolean isSpicy;

private boolean hasCheese;

//其他属性

}

```

接下来,我们需要定义抽象建造器,并定义构造菜单所需的方法:

```

public interface MenuBuilder {

public void setName(String name);

public void setDescription(String description);

public void setPrice(double price);

public void setIsVegetarian(boolean isVegetarian);

public void setIsSpicy(boolean isSpicy);

public void setHasCheese(boolean hasCheese);

//其他方法

public Menu getMenu();

}

```

然后,让我们定义一个具体的建造者,以便根据要求创建特定的菜单。

```

public class BurgerMenuBuilder implements MenuBuilder {

private Menu menu;

public BurgerMenuBuilder(String name, double price) {

this.menu = new Menu(name, "Burger Menu Item", price);

}

public void setIsVegetarian(boolean isVegetarian) {

this.menu.setIsVegetarian(isVegetarian);

}

public void setIsSpicy(boolean isSpicy) {

this.menu.setIsSpicy(isSpicy);

}

public void setHasCheese(boolean hasCheese) {

this.menu.setHasCheese(hasCheese);

}

public Menu getMenu() {

return menu;

}

}

```

最后,我们需要定义指挥官,以便协调构建过程并完成菜单的创建。在一个餐厅中,指挥者会协调不同的具体建造者来创建菜单:

```

public class MenuDirector {

public Menu buildBurgerMenu(String name, double price, boolean isVegetarian, boolean isSpicy, boolean hasCheese) {

BurgerMenuBuilder burgerMenuBuilder = new BurgerMenuBuilder(name, price);

burgerMenuBuilder.setIsVegetarian(isVegetarian);

burgerMenuBuilder.setIsSpicy(isSpicy);

burgerMenuBuilder.setHasCheese(hasCheese);

return burgerMenuBuilder.getMenu();

}

}

```

现在,我们就可以创建一个完整的菜单,例如一个奶酪汉堡,它是一个具有许多属性的完整菜单:

```

Menu menu = new MenuDirector().buildBurgerMenu("Cheeseburger", 9.99, false, false, true);

```

扫码咨询 领取资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考资格查询系统

扫一扫,自助查询报考条件