建造者模式 rust和java的实现(一)

简介: 建造者模式 rust和java的实现

建造者模式

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。

一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。

介绍

  • 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
  • 主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。
  • 关键代码:建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系。
  • 应用实例: 1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"。
优点
  • 分离构建过程和表示,使得构建过程更加灵活,可以构建不同的表示。
  • 可以更好地控制构建过程,隐藏具体构建细节。
  • 代码复用性高,可以在不同的构建过程中重复使用相同的建造者。
缺点
  • 如果产品的属性较少,建造者模式可能会导致代码冗余。
  • 建造者模式增加了系统的类和对象数量。
使用场景
  • 需要生成的对象具有复杂的内部结构。
  • 需要生成的对象内部属性本身相互依赖。

建造者模式在创建复杂对象时非常有用,特别是当对象的构建过程涉及多个步骤或参数时。它可以提供更好的灵活性和可维护性,同时使得代码更加清晰可读。

实现

我们假设一个快餐店的商业案例,其中,一个典型的套餐可以是一个汉堡(Burger)和一杯冷饮(Cold drink)。汉堡(Burger)可以是素食汉堡(Veg Burger)或鸡肉汉堡(Chicken Burger),它们是包在纸盒中。冷饮(Cold drink)可以是可口可乐(coke)或百事可乐(pepsi),它们是装在瓶子中。

我们将创建一个表示食物条目(比如汉堡和冷饮)的 Item 接口和实现 Item 接口的实体类,以及一个表示食物包装的 Packing 接口和实现 Packing 接口的实体类,汉堡是包在纸盒中,冷饮是装在瓶子中。

然后我们创建一个 Meal 类,带有 Item 的 ArrayList 和一个通过结合 Item 来创建不同类型的 Meal 对象的 MealBuilder。BuilderPatternDemo 类使用 MealBuilder 来创建一个 Meal。

建造者模式的 UML 图

java

步骤 1

创建一个表示食物条目和食物包装的接口。

Item.java

public interface Item {
   public String name();
   public Packing packing();
   public float price();    
}
Packing.java
public interface Packing {
   public String pack();
}

步骤 2

创建实现 Packing 接口的实体类,方便进行不同的包装。

Wrapper.java

public class Wrapper implements Packing {
   @Override
   public String pack() {
      return "Wrapper";
   }
}

Bottle.java

public class Bottle implements Packing {
   @Override
   public String pack() {
      return "Bottle";
   }
}

步骤 3

创建实现 Item 接口的抽象类,该类提供了默认的功能,实现汉堡抽象和冷饮抽象的包装类。

Burger.java

public abstract class Burger implements Item {
   @Override
   public Packing packing() {
      return new Wrapper();
   }
   @Override
   public abstract float price();
}

ColdDrink.java

public abstract class ColdDrink implements Item {
    @Override
    public Packing packing() {
       return new Bottle();
    }
    @Override
    public abstract float price();
}

步骤 4

创建扩展了 Burger 和 ColdDrink 的实体类。

VegBurger.java

public class VegBurger extends Burger {
   @Override
   public float price() {
      return 25.0f;
   }
   @Override
   public String name() {
      return "Veg Burger";
   }
}

ChickenBurger.java

public class ChickenBurger extends Burger {
   @Override
   public float price() {
      return 50.5f;
   }
   @Override
   public String name() {
      return "Chicken Burger";
   }
}

Coke.java

public class Coke extends ColdDrink {
   @Override
   public float price() {
      return 30.0f;
   }
   @Override
   public String name() {
      return "Coke";
   }
}

Pepsi.java

public class Pepsi extends ColdDrink {
   @Override
   public float price() {
      return 35.0f;
   }
   @Override
   public String name() {
      return "Pepsi";
   }
}


建造者模式 rust和java的实现(二)https://developer.aliyun.com/article/1392032

相关文章
|
4月前
|
设计模式 Java 机器人
Java设计模式-建造者模式
建造者(Builder)模式指将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。它是把对象的构建和表述分离。
52 0
Java设计模式-建造者模式
|
5月前
|
设计模式 Java
Java设计模式【四】:建造者模式
Java设计模式【四】:建造者模式
24 0
|
1月前
|
设计模式 Java
23种设计模式,建造者模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】建造者模式是一种对象创建型设计模式,用于创建复杂对象。其核心思想是将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通常包括一个Director类,用于管理构建过程,和多个Builder类,每个Builder负责构造复杂对象的一部分。
29 7
|
3月前
|
Rust 安全 Java
Rust与Java:性能与效率的较量
本文将对比Rust和Java两种编程语言在性能和效率方面的差异。我们将探讨Rust如何通过其独特的内存管理、并发模型和编译时优化来实现高性能,同时分析Java如何在虚拟机(JVM)的支持下实现高效运行。通过比较这两种语言的特性和应用场景,我们可以为开发者在选择编程语言时提供有益的参考。
|
4月前
|
Rust Java Linux
【一起学Rust | 进阶篇 | jni库】JNI实现Java与Rust进行交互
【一起学Rust | 进阶篇 | jni库】JNI实现Java与Rust进行交互
87 0
|
5月前
|
Rust 前端开发 Java
中介者模式 rust和java的实现
中介者模式 rust和java的实现
41 0
|
5月前
|
存储 Rust Java
备忘录模式 rust和java的实现
备忘录模式 rust和java的实现
30 0
|
5月前
|
设计模式 Rust Java
组合模式 rust和java的实现
组合模式 rust和java的实现
63 0
|
5月前
|
Rust Java uml
外观模式 rust和java的实现
外观模式 rust和java的实现
41 0
|
设计模式 缓存 Java
【Java设计模式】用盖房子案例讲解建造者模式(生成器模式)
【Java设计模式】用盖房子案例讲解建造者模式(生成器模式)
【Java设计模式】用盖房子案例讲解建造者模式(生成器模式)