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

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

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

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

  1. 角色类:包含多个组成部件的复杂对象
    public class Shape {
        private String triangle;
        private String circular;
        private String rectangle;
    
        public void setTriangle(String triangle) {
            this.triangle = triangle;
        }
    
        public void setCircular(String circular) {
            this.circular = circular;
        }
    
        public void setRectangle(String rectangle) {
            this.rectangle = rectangle;
        }
    
        public void draw() {
            //使用得到的具体的三角形圆形矩形绘制一个图形
        }
    }
  2. 抽象建造者:包含创建产品各个子部件的抽象方法
    abstract class Builder {
        protected Shape shape = new Shape();
        public abstract void buildTriangle();
        public abstract void buildCircular();
        public abstract void buildRectangle();
    
        public Shape getShape() {
            return shape;
        }
    }
  3. 具体建造者:实现了抽象建造者接口
    public class ConcreteBuilder1 extends Builder{
        @Override
        public void buildTriangle() {
            shape.setTriangle("建造 红色三角形");
        }
    
        @Override
        public void buildCircular() {
            shape.setCircular("建造 蓝色圆形");
        }
    
        @Override
        public void buildRectangle() {
            shape.setRectangle("建造 绿色矩形");
        }
    }
    public class ConcreteBuilder2 extends Builder{
        @Override
        public void buildTriangle() {
            shape.setTriangle("建造 青色三角形");
        }
    
        @Override
        public void buildCircular() {
            shape.setCircular("建造 蓝色圆形");
        }
    
        @Override
        public void buildRectangle() {
            shape.setRectangle("建造 紫色矩形");
        }
    }
  4. 指挥者:调用建造者中的方法完成复杂对象的创建。
    public class Director {
        private Builder builder;
        public Director(Builder builder) {
            this.builder = builder;
        }
        //产品构建与组装方法
        public Shape construct() {
            builder.buildTriangle();
            builder.buildCircular();
            builder.buildRectangle();
            return builder.getShape();
        }
    }
  5. 使用
        public static void main(String[] args) {
    
            Builder builder = new ConcreteBuilder1();
            Director director = new Director(builder);
            Shape shape = director.construct();
            shape.draw();
    
            builder = new ConcreteBuilder2();
            director = new Director(builder);
            shape = director.construct();
            shape.draw();
        }

http://www.kler.cn/news/136255.html

相关文章:

  • 群控系统服务端开发模式-系统架构图
  • 15分钟学 Go 第 22 天:包的使用
  • Jetpack架构组件_LiveData组件
  • 人脸应用实例:性别年龄预测
  • 10.25学习
  • Cout输出应用举例
  • 广州华锐互动VRAR | VR课件内容编辑器解决院校实践教学难题
  • 中贝通信-603220 三季报分析(20231120)
  • 【python】直方图正则化详解和示例
  • Fourier分析导论——第6章——R^d 上的Fourier变换(E.M. Stein R. Shakarchi)
  • 【C++】使用std::vector()函数实现矩阵的加、减、点乘、点除等运算
  • 【腾讯云 HAI域探秘】高性能服务器引领AI革新浪潮:从AI绘画、知识问答到PyTorch图像分类、视频检测的全方位探索
  • React 中 react-i18next 切换语言( 项目国际化 )
  • mysql5.6 修改密码
  • Nosql之redis概述及基本操作
  • C++二分算法:找到最接近目标值的函数值
  • 用css实现原生form中radio单选框和input的hover已经focus的样式
  • DRF纯净版项目搭建和配置
  • ExcelBDD PHP Guideline
  • 从0开始学习JavaScript--JavaScript使用Promise
  • 虹科示波器 | 汽车免拆检修 | 1994款凯迪拉克fleetwood车发动机无法起动
  • 论文阅读:“iOrthoPredictor: Model-guided Deep Prediction of Teeth Alignment“
  • 访问限制符说明面向对象的封装性
  • 【ArcGIS Pro微课1000例】0033:ArcGIS Pro处理cad数据(格式转换、投影变换)
  • leetcode做题笔记2736. 最大和查询
  • 管家婆订货易在线商城任意文件上传漏洞复现