当前位置: 首页 > news >正文

设计模式 建造者模式

建造者模式介绍

  • 建造者模式 (builder pattern), 也被称为生成器模式 , 是一种创建型设计模式.
    定义: 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。
要解决的问题

建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节。

建造者模式原理

建造者(Builder)模式包含以下4个角色 :

  • 抽象建造者类(Builder):这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的部件对象的创建。
  • 具体建造者类(ConcreteBuilder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。在构造过程完成后,提供一个方法,返回创建好的负责产品对象。
  • 产品类(Product):要创建的复杂对象 (包含多个组成部件).
  • 指挥者类(Director):调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建(客户端一般只需要与指挥者进行交互)。
建造者模式的优点包括:
  1. 封装性好:将复杂对象的创建过程封装在独立的建造者类中,使得对象的创建过程更加清晰和易于理解。
  2. 灵活性高:通过使用建造者模式,可以灵活地修改对象的创建过程,而不需要修改对象的具体表示。
  3. 可复用性强:建造者模式将对象的创建过程分解为多个步骤,可以将这些步骤封装在独立的建造者类中,从而提高了代码的可复用性。
建造者模式的缺点包括:
  1. 类的数量增多:由于将对象的创建过程分解为多个步骤,并将这些步骤封装在独立的建造者类中,因此需要创建多个建造者类,从而增加了类的数量。
  2. 建造过程复杂:如果对象的创建过程过于复杂,可能会导致建造者类的建造过程也变得复杂,从而增加了代码的维护难度。
创建继承类
public abstract class AbstractBuider {protected Buider buider = new Buider();public abstract  void setBuider();public abstract void setName();public abstract void setAge();public abstract Buider getBuider();}
继承并分别去实现然后去进行不同的改动

package BuilderModel;public class RealizeBuilder2 extends AbstractBuider{@Overridepublic void setBuider() {this.buider = new Buider();}@Overridepublic void setName() {buider.setName("李四");}@Overridepublic void setAge() {buider.setAge("123111");}@Overridepublic Buider getBuider() {return buider;}
}public class RealizeBuilder1 extends AbstractBuider {@Overridepublic void setBuider() {this.buider = new Buider();}@Overridepublic void setName() {buider.setName("张三");}@Overridepublic void setAge() {buider.setAge("123");}@Overridepublic Buider getBuider() {return buider;}
}public class RealizeBuilder2 extends AbstractBuider{@Overridepublic void setBuider() {this.buider = new Buider();}@Overridepublic void setName() {buider.setName("李四");}@Overridepublic void setAge() {buider.setAge("123111");}@Overridepublic Buider getBuider() {return buider;}
}
封装一个统一调用类去分别实现
public class Director {private  AbstractBuider buider;public Director(AbstractBuider buider) {this.buider = buider;}public Buider construct() {buider.setBuider();buider.setAge();buider.setName();return buider.getBuider();}
}
具体执行
public static void main(String[] args) {Director director = new Director(new RealizeBuilder1());Director director1 = new Director(new RealizeBuilder2());Buider construct = director.construct();Buider construct1 = director1.construct();System.out.println(construct.toString());System.out.println(construct1.toString());
}

建造者模式可以让你以一种灵活的方式创建复杂的对象,同时也使得创建过程易于扩展和维护。


http://www.mrgr.cn/news/1110.html

相关文章:

  • C++ //练习 18.6 已知下面的异常类型和catch语句,书写一个throw表达式使其创建的异常对象能被这些catch语句捕获:
  • 非关系型数据库MongoDB(文档型数据库)介绍与使用实例
  • 安装Pentaho Data Integration并启动
  • C++入门——08list
  • Flutter-->使用dart编写蒲公英上传脚本
  • 七大排序算法
  • 基于飞腾平台的Hadoop的安装配置
  • 智慧水务项目(七)vscode 远程连接ubuntu 20.04 服务器,调试pyscada,踩坑多多
  • BOOST c++库学习 之 boost.mpi库入门实战指南 以及 使用 boost.mpi库实现进程间通讯(同步与异步的对比)的简单例程
  • Nuxt3【详解】资源引用 vs 添加样式(2024最新版)
  • EmguCV学习笔记 VB.Net和C# 下的OpenCv开发 C# 目录
  • AI安全-文生图
  • leetcode 41-50(2024.08.19)
  • Centos系统中创建定时器完成定时任务
  • CDGA|数据治理落地实践指南:构建高效、安全的数据管理体系
  • 小五金加工:细节决定产品质量与性能
  • 验证实战知识点--(1)
  • Unity与UE,哪种游戏引擎适合你?
  • Midjourney中文版教程:参数详解
  • 【多线程开发 6】spring中的注解/API的线程问题