【设计模式】—— 创建者模式Builder

  前言:【模式总览】——————————by xingoo

  模式意图

  一个对象的创建十分复杂,为了区分构建过程和使用过程,因此分开。使用一个Director类进行对象的创建,Builder规定了这个创建过程。

  模式结构

  Builder 抽象建造者接口,规范各个组成部分的构建。

  ConcreteBuilder 具体建造者角色,实现组成部分的构建,并提供示例。

  Product 产品角色,创建返回的对象。

  Director 导演者角色,负责创建以及使用。

  使用场景

  1 当创建对象复杂并且与其使用过程独立。

  2 构造过程允许构造的对象有不同的表示。

  代码结构

  Builder接口

1 abstract class Builder{
2     public abstract void buildPart1();
3     public abstract void buildPart2();
4     public abstract Product retrieveResult();
5 }

  ConcreteBuilder 具体产品

复制代码
 1 class ConcreteBuilder extends Builder{
 2     public void buildPart1() {
 3         
 4     }
 5     public void buildPart2() {
 6         
 7     }
 8     public Product retrieveResult() {
 9         return null;
10     }
11 }
复制代码

  Product 产品

1 class Product{
2     //Anything
3 }

  Director 导演者角色

复制代码
1 class Director{
2     private Builder builder;
3     public void Constructor(){
4         builder = new ConcreteBuilder();
5         builder.buildPart1();
6         builder.buildPart2();
7         builder.retrieveResult();
8     }
9 }
复制代码

 

  生活中的设计模式

 

  

‘  近年来,变形金刚4出了也快半年了,但是还是喜欢第一部的女主角。

  而擎天柱队长,经典的台词,“汽车人变身”也是伴随着复杂的变化过程。而汽车人的转变只在一瞬之间,看起来行云流水,这就有点创建者的味道。擎天柱的各个身体部分经过复杂的变化,最后变身成为汽车人。

  

复制代码
 1 /**
 2  * Builder
 3  */
 4 interface Transformer{
 5     public void Create_Head();
 6     public void Create_Body();
 7     
 8     public Autobots transforming();
 9 }
10 /**
11  * ConcreteBuilder
12  */
13 class Transformer_Captain implements Transformer{
14     public void Create_Head() {
15         System.out.println("变形出脑袋...");
16     }
17     public void Create_Body() {
18         System.out.println("变形出身体...");
19     }
20     public Autobots transforming() {
21         return new Autobots();
22     }
23 }
24 /**
25  * Product
26  */
27 class Autobots{
28      Autobots(){
29         System.out.println("啊!...变形金刚 变身....");
30     }
31 }
32 /**
33  * 这个类当做Director
34  */
35 public class TransformerBuilder {
36     
37     public static Autobots Transforming(Transformer optimusPrime){
38         optimusPrime.Create_Head();
39         optimusPrime.Create_Body();
40         return optimusPrime.transforming();
41     }
42     
43     public static void main(String[] args){
44         Transformer optimusPrime = new Transformer_Captain();
45         Transforming(optimusPrime);
46     }
47     
48 }
复制代码

  变身结果

变形出脑袋...
变形出身体...
啊!...变形金刚 变身....

 

  

posted @   xingoo  阅读(3518)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2012-10-23 LSP(分层服务提供者)
2012-10-23 Winsock协议目录
2012-10-23 SPI概述
2012-10-23 n后问题-回溯法
2012-10-23 符号三角形问题-回溯法
2012-10-23 批处理作业调度-回溯法
点击右上角即可分享
微信分享提示