IT职涯

一个多年的IT人的博客
随笔 - 33, 文章 - 0, 评论 - 189, 阅读 - 18万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

Java设计模式三:建造者模式(Builder Pattern)

Posted on   IT职涯  阅读(1025)  评论(0编辑  收藏  举报
建造者模式也叫做生成器模式,将一个复杂的对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。

角色:
1. builder抽象建造者: 为创建一个产品对象的各个部件指定抽象接口.

2. ConcreteBuilder具体建造者: 实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口.

3. Director导演:负责安排已有模块的顺序,然后告诉Builder开始建造.

4. Product产品类: 表示被构造的复杂对象.通常实现了模板方法模式.

 

类图:

 

实例:
//Builder
public interface PersonBuilder {
  void buildHead();
  void buildBody();
  void buildFoot();
  Person buildPerson();
}

//ConcreteBuilder
public class ManBuilder implements PersonBuilder {
  Person person;
  public ManBuilder() {
  person = new Man();
  }
  public void buildbody() {
  person.setBody("建造男人的身体");
  }
  public void buildFoot() {
  person.setFoot("建造男人的脚");
  }
  public void buildHead() {
  person.setHead("建造男人的头");
  }
  public Person buildPerson() {
  return person;
  }
}

//Dirictor
public class PersonDirector {
  public Person constructPerson(PersonBuilder pb) {
  pb.buildHead();
  pb.buildBody();
  pb.buildFoot();
  return pb.buildPerson();
  }
  }

//Product
public class Person {
  private String head;
  private String body;
  private String foot;
  public String getHead() {
  return head;
  }
  public void setHead(String head) {
  this.head = head;
  }
  public String getBody() {
  return body;
  }
  public void setBody(String body) {
  this.body = body;
  }
  public String getFoot() {
  return foot;
  }
  public void setFoot(String foot) {
  this.foot = foot;
  }
}

public class Man extends Person {
}

//Test
public class Test{
  public static void main(String[] args) {
  PersonDirector pd = new PersonDirector();
  Person person = pd.constructPerson(new ManBuilder());
  System.out.println(person.getBody());
  System.out.println(person.getFoot());
  System.out.println(person.getHead());
  }
}

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示