• 设计模式 -- 建造者模式(Builder Pattern)


    这个模式以前也义Android-kotlin的场景下讲过 Android 用建造者模式模式写一个Dialog-CSDN博客
    不过用的是 变种的建造者模式
    建造者模式: 属于创建型模式 提供了一种创建对象的最佳方式, 使用多个简单的对象一步一步构建成一个复杂的对象
    介绍
    • 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
    • 主要解决问题:一些基本部件不会变,而其组合经常变化的时候。需要生成的对象具有复杂的内部结构,需要生成的对象内部属性本身相互依赖。
    • 关键代码:实现与被代理类组合。
    • 优点:1、建造者独立,易扩展。 2、便于控制细节风险。
    • 缺点:1、产品必须有共同点,范围有限制。 2、如果内部变化复杂,会有很多的建造类。

     以建造一个三角形圆形矩形的图形为例

    1. 角色类:包含多个组成部件的复杂对象
      1. public class Shape {
      2. private String triangle;
      3. private String circular;
      4. private String rectangle;
      5. public void setTriangle(String triangle) {
      6. this.triangle = triangle;
      7. }
      8. public void setCircular(String circular) {
      9. this.circular = circular;
      10. }
      11. public void setRectangle(String rectangle) {
      12. this.rectangle = rectangle;
      13. }
      14. public void draw() {
      15. //使用得到的具体的三角形圆形矩形绘制一个图形
      16. }
      17. }
    2. 抽象建造者:包含创建产品各个子部件的抽象方法
      1. abstract class Builder {
      2. protected Shape shape = new Shape();
      3. public abstract void buildTriangle();
      4. public abstract void buildCircular();
      5. public abstract void buildRectangle();
      6. public Shape getShape() {
      7. return shape;
      8. }
      9. }
    3. 具体建造者:实现了抽象建造者接口
      1. public class ConcreteBuilder1 extends Builder{
      2. @Override
      3. public void buildTriangle() {
      4. shape.setTriangle("建造 红色三角形");
      5. }
      6. @Override
      7. public void buildCircular() {
      8. shape.setCircular("建造 蓝色圆形");
      9. }
      10. @Override
      11. public void buildRectangle() {
      12. shape.setRectangle("建造 绿色矩形");
      13. }
      14. }
      1. public class ConcreteBuilder2 extends Builder{
      2. @Override
      3. public void buildTriangle() {
      4. shape.setTriangle("建造 青色三角形");
      5. }
      6. @Override
      7. public void buildCircular() {
      8. shape.setCircular("建造 蓝色圆形");
      9. }
      10. @Override
      11. public void buildRectangle() {
      12. shape.setRectangle("建造 紫色矩形");
      13. }
      14. }
    4. 指挥者:调用建造者中的方法完成复杂对象的创建。
      1. public class Director {
      2. private Builder builder;
      3. public Director(Builder builder) {
      4. this.builder = builder;
      5. }
      6. //产品构建与组装方法
      7. public Shape construct() {
      8. builder.buildTriangle();
      9. builder.buildCircular();
      10. builder.buildRectangle();
      11. return builder.getShape();
      12. }
      13. }
    5. 使用
      1. public static void main(String[] args) {
      2. Builder builder = new ConcreteBuilder1();
      3. Director director = new Director(builder);
      4. Shape shape = director.construct();
      5. shape.draw();
      6. builder = new ConcreteBuilder2();
      7. director = new Director(builder);
      8. shape = director.construct();
      9. shape.draw();
      10. }
  • 相关阅读:
    Java#23(常见API--1)
    kubernetes之镜像拉取策略ImagePullSecrets;
    lintcode 1832 · 最小步数【BFS 中等】
    一文入门 HTTP 协议
    计算机毕业设计 基于Spring Boot智能停车计费系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试
    Object转List<>,转List<Map<>>
    施工企业选择智慧工地的有效方法
    Unity-Timeline制作动画(快来制作属于你的动画吧)
    西门子200系列PLC通信编程指令讲解
    什么是MVVM模式?(含示例)
  • 原文地址:https://blog.csdn.net/qq_50675668/article/details/134434590