Java 建造者模式:轻松实现共享单车多样化配置创建
好的,下面是一个使用建造者模式实现创建共享单车的示例代码。这个例子中,我们将创建一个自行车产品(`Bike`),包含车架(`Frame`)和车座(`Seat`)。我们将定义一个抽象建造者(`Builder`),以及两个具体的建造者(`MobikeBuilder` 和 `HelloBuilder`)。我们还需要一个指挥者(`Director`)来控制建造过程,并在测试类中进行验证。 产品类:Bike ```java public class Bike { private String frame; private String seat; public void setFrame(String frame) { this.frame = frame; } public void setSeat(String seat) { this.seat = seat; } @Override public String toString() { return "Bike{frame='" + frame + "', seat='" + seat + "'}"; } } ``` 抽象建造者:Builder ```java public abstract class Builder { protected Bike bike; public Builder() { this.bike = new Bike(); } public abstract void buildFrame(); public abstract void buildSeat(); public Bike getBike() { return bike; } } ``` 具体建造者:MobikeBuilder ```java public class MobikeBuilder extends Builder { @Override public void buildFrame() { bike.setFrame("碳纤维"); } @Override public void buildSeat() { bike.setSeat("橡胶"); } } ``` 具体建造者:HelloBuilder ```java public class HelloBuilder extends Builder { @Override public void buildFrame() { bike.setFrame("铝合金"); } @Override public void buildSeat() { bike.setSeat("真皮"); } } ``` 指挥者:Director ```java public class Director { private Builder builder; public Director(Builder builder) { this.builder = builder; } public void construct() { builder.buildFrame(); builder.buildSeat(); } } ``` 测试类 ```java public class Test { public static void main(String[] args) { // 创建 MobikeBuilder 实例 Builder mobikeBuilder = new MobikeBuilder(); Director director = new Director(mobikeBuilder); director.construct(); Bike mobike = mobikeBuilder.getBike(); System.out.println("Mobike: " + mobike); // 创建 HelloBuilder 实例 Builder helloBuilder = new HelloBuilder(); director = new Director(helloBuilder); director.construct(); Bike helloBike = helloBuilder.getBike(); System.out.println("HelloBike: " + helloBike); } } ``` 运行结果 ``` Mobike: Bike{frame='碳纤维', seat='橡胶'} HelloBike: Bike{frame='铝合金', seat='真皮'} ``` 在这个示例中,我们通过建造者模式将复杂的自行车构建过程分解成多个步骤,并且可以通过不同的具体建造者来创建不同配置的自行车。指挥者类负责调用这些步骤,确保构建过程的一致性。 ######[AI写代码神器 | 676点数解答 | 2024-11-08 16:15:47]
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)438
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)337
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1232
- Spring框架实战:从配置到实现,搞定员工信息查询功能(GPT | 2135点数解答 | 2024-06-12 08:32:35)331
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)383
- Java 创建 HTTP POST 请求实现文件上传:代码示例与注意要点 (字节豆包 | 300点数解答 | 2024-12-06 16:07:20)356
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)352
- "Java Code: Uncovering Stock Statistics through CSV File Reading"(字节豆包 | 66点数解答 | 2024-11-13 15:31:04)347
- 手把手教你在Jenkins中配置并发执行线程数,附负载调整提示!( | 253点数解答 | 2024-01-10 10:12:35)424
- Flink启动slot个数为0?剖析flink-conf.yaml中taskmanager.numberoftaskslots配置问题(阿里通义 | 396点数解答 | 2024-03-28 14:16:08)459
- Zuul 为 /opcenter/clue/upload/type 接口设置超时时间的 properties 配置示例(字节豆包 | 199点数解答 | 2024-11-15 11:15:46)272
- Zuul 为特定接口 /opcenter/clue/upload/type 设置超时时间的 properties 配置详解(阿里通义 | 476点数解答 | 2024-11-15 11:16:24)402