设计模式之建造者模式

Fatal Exception: android.app.RemoteServiceException: Bad notification for startForeground: java.lang 1、抛出问题: Fatal Exception: android.app.RemoteServiceException: Bad notification for startForeground: java.lang.RuntimeException: icon must be non-zero at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1869) at android.os.Handl 阅读详情

今天我们来说说设计模式中的建造者模式。

日常开发中我们见过的建造者模式应该还不算少,平常用的Dialog和一些第三方框架,挺多一部分正是用了建造者模式。

建造者模式是创建一个复杂对象的创建型模式,有人也称它为生成器模式,它将其构建复杂对象的过程和它
的组件解耦,使得构建过程和组件分离开来。比如我们自己DIY一部手机,我们可以根据自己的喜好去选择
它的CPU,是麒麟的还是骁龙的,还有它的屏幕, 是要索尼的还是三星的,或是其他组件的其他要求,这些
组件是我们根据自己的喜好选择的,但是这些组件组装成一部手机的过程是一样的,我们无须知道这些部件是
怎么样组装成手机的,我们只需要提供相应的组件和配置就可以了。对于这种情况下,我们就比较适合用建造
者模式了,将组件和组件的组装过程分离,使得组件和组装过程都可以自由扩展。

还是一样,我们先来看看它的定义:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式中有如下角色:
Director:导向器,引向器,负责安排已有模块的顺序,然后通知Builder开始建造。
Builder:抽象Builder类,规范产品的组建,一般由子类实现。
ConcreteBuilder:具体建造者,实现抽象Builder类中定义的所有方法,并且返回一个组建好的对象。
Product:产品类。

下面我们用一个例子简单实现下建造者模式。
首先我们创建产品类,新建一个Phone类,假设它有三个零件组成:CPU,屏幕、电池。并提供3个方法
用来设置CPU、屏幕、电池。

public class Phone{
    private String mCpu;
    private String mScreen;
    private String mBattery;

    public void setmCpu(String mCpu){
        this.mCpu = mCpu;
    }

    public void setmScreen(String mScreen){
        this.mScreen = mScreen;
    }

    public void setmBattery(String mBattery){
        this.mBattery = mBattery;
    }
}

接下来我们需要Builder抽象类,用来规范产品的组件,一部完整的手机需要一个CPU、屏幕、电池。
其里面提供了安装CPU、屏幕、电池的方法,以及组装成计算机的create方法。

public abstract class Builder{
    public abstract void buildCpu(String cpu);
    public abstract void buildScreen(String screen);
    public abstract void buildBattery(String battery);
    public abstract Phone create();
}

接着我们实现具体的建造者,SuperPhoneBuilder用于组装超级手机。

public class SuperPhoneBuilder extends Builder{
    private Phone mPhone = new Phone();
    @Override
    public void buildCpu(String cpu) {
        mPhone.setmCpu(cpu);
    }

    @Override
    public void buildScreen(String screen) {
        mPhone.setmScreen(screen);
    }

    @Override
    public void buildBattery(String battery) {
        mPhone.setmBattery(battery);
    }

    @Override
    public Phone create() {
        return mPhone;
    }
}

最后我们需要导向器来规范组装手机的流程规范,先安装CPU,然后装屏幕,最后装电池。

public class Direcror{
    Builder mBuild = null;
    public Direcror(Builder build){
        this.mBuild = build;
    }
    public Phone createPhone(String cpu,String srceen,String battery){
        this.mBuild.buildCpu(cpu);
        this.mBuild.buildScreen(srceen);
        this.mBuild.buildBattery(battery);
        this.mBuild.create();
    }
}

到这里,我们的组建手机的过程已经定义完成了,接下来我们看看最后我们怎么去组装这部手机,我们只需要
提供自己想要的CPU型号,屏幕厂商,和电池容量就可以了,至于它是怎么组建的我们无须知道。看看代码

public class CreatePhone{
    public static void main(String[] args){
        Builder builder = new SuperPhoneBuilder();
        Direcror direcror = new Direcror(builder);
        Phone phone = direcror.createPhone("麒麟810","Sony 4K","10000mAh");

    }
}

现在,我们完整的建造手机的例子已经完成。

接下来整理一下建造者模式的使用场景和优缺点。

使用场景:
1:当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2:相同的方法,不同的执行顺序,产生不同的事件结果时。
3:多个部件或零件都可以被装配到一个对象中,但是产生的运行结果又不相同时。
4:产品类非常复杂,或者产品类中的调用顺序不同而产生了不同的效能。
5:在创建一下复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件
面临着复杂的变化。
优点:
1:使用建造者模式可以使客户端段不必知道产品内部组成的细节。
2:具体的建造者之间是相互独立的,容易扩展。
3:由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
缺点:
产生多余的Build对象以及导向器。

 

再累再苦,只当自己是二百五,再艰再险,只当自己是二皮脸。与君共勉~

C++设计模式——Builder Pattern建造者模式 建造者模式,又被称为生成器模式,是一种创建型设计模式,它将复杂产品的构建过程分解为一系列简单的步骤,每个步骤由独立的建造者对象负责。建造者模式常用于创建复杂的对象,它避免了直接传递大量参数来构造函数,使得构建过程变得可控,让代码变得灵活和可维护。建造者模式允许开发者按照指定的步骤创建复杂对象,构建过程的细节被封装在具体建造者中,将创建对象的过程和表示对象的过程分离,且同一个构建过程可以使用不同的具体建造者以及不同的顺序来创建不同的表示。 阅读详情

相关推荐

为什么BGA焊点总在四个角先坏?一次热-振耦合仿真给你讲明白

本文通过Ansys Workbench进行热-振耦合仿真,深入分析了BGA焊点在四个角点先失效的机理。研究发现,角点焊点由于CTE失配、振动载荷放大及几何应力集中等因素,承受的等效塑性应变和动态应力显著高于中心区域,导致其疲劳寿命大幅降低。仿真数据揭示了角点焊点的应力分布和蠕变特性,为电子封装可靠性设计提供了重要依据。

weixin_42535461的博客 439

android.app.RemoteServiceException: Bad notification for startForeground

解决方法是 在 Android 8.0上 创建一个 NotificationChannel,代码如下。

代码小疯子 3861

Halcon 3D点云处理实战:从PLY文件读取到曲面匹配的完整流程(附避坑指南)

本文详细介绍了Halcon在3D点云处理中的完整流程,从PLY文件读取到曲面匹配,特别强调了3D算子的应用技巧和避坑指南。通过实战案例和参数优化建议,帮助开发者高效处理工业视觉检测中的复杂点云数据,提升匹配精度和性能。

weixin_42535720的博客 278

Android 处理 android.app.RemoteServiceException: Bad notification for startForeground: java.lang.Ru

在做第一行代码的10.5.1节中会出现如下的报错 书上的源码如下 先在MainActivity中定义一个按钮,按钮中的点击事件如下 @Override public void onClick(View v) { //启动服务时实际上是一个跳转 switch (v.getId()) { case R.id.button1: Intent startIntent = new Intent(this,MyServic

weixin_46760781的博客 9678

告别硬编码!用Aviator 5.3.3实现动态规则引擎,Spring Boot项目实战教程

本文详细介绍了如何使用Aviator 5.3.3在Spring Boot项目中实现动态规则引擎,告别硬编码。通过Maven依赖集成、规则模型设计、规则执行引擎实现及电商促销系统实战案例,展示了Aviator在动态规则配置中的高效应用,提升业务灵活性和开发效率。

weixin_30329623的博客 446

共享最近邻相似度

共享最近邻相似度 第三十四次写博客,本人数学基础不是太好,如果有幸能得到读者指正,感激不尽,希望能借此机会向大家学习。本文作为基于图的聚类的第二部分,主要针对“共享最近邻相似度(Shared Nearest Neighbour)”以及使用该度量的“Jarvis-Patrick聚类”进行介绍。其他基于图的聚类算法的链接可以在这篇综述《基于图的聚类算法综述(基于图的聚类算法开篇)》的结尾找到。 S...

Ἥλιος 7606

android.app.RemoteServiceException: Bad notification for startForeground: java.lang.RuntimeException

安卓开发8.1以上系统启动服务和通知报错     android.app.RemoteServiceException: Bad notification for startForeground: java.lang.RuntimeException: invalid channel for service notification: Notification(channel=null pri=...

qq_33649832的博客 2万+

【unity游戏开发之InputSystem——01】通过写代码监听InputSystem输入(基于unity6开发介绍)

通过写代码监听InputSystem输入(基于unity6开发介绍)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 4891

设计模式—建造者模式及实例(BuilderPattern)

建造者模式(Builder Pattern)也称生成器模式,它属于创建型模式。

小嵩的博客 4002

【unity游戏开发入门到精通——UGUI】UI控件 —— Toggle开关切换控件

【unity游戏开发入门到精通——UGUI】UI控件 —— Toggle开关切换控件

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1845

【Linux】软件控制USB重新上电、加载:usbreset、hubpower、uhubctl

使用命令控制USB的供电、复位

郭老二 2185

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

Java 设计模式——建造者模式(Builder Pattern) 一.简介 1.定义 将一个复杂对象的构建与它表示分离,使用同样的构建过程可以创建不同的表示 2.主要作用 在用户不知道对象建造过程和细节的情况下就可以直接创建复杂对象 3.如何使用 用户只需给出指定复杂对象的类型和内容,建造者模式负责按顺序创造对象(把内部建造过程和细节隐藏起来) 4.解决的问题 (1).方便用户创建复杂的对...

a158s168的博客 276

PCL 直通滤波器【2026最新版】

PCL直通滤波器函数详解以及用于多字段滤波、强度滤波、获取某一时间范围内的点等高阶用法案例分享。博客长期更新,本文最近一次更新时间为:2026年3月11日。

点云侠的博客 40万+

【设计模式】Java 设计模式之建造者模式(Builder Pattern)

建造者模式是一种强大的设计模式,它通过抽象化对象的构建过程,提高了代码的可读性、可维护性和可扩展性。该模式适用于需要创建复杂对象且创建过程需要灵活调整的场景。通过定义建造者接口和指挥者类,我们可以将对象的构建逻辑与使用逻辑分离,使得代码更加清晰和易于维护。此外,建造者模式还支持创建多种表示的产品,增强了系统的灵活性。在实际应用中,我们可以根据需求选择合适的建造者模式变种和扩展应用方式,如带有默认值的建造者或链式调用的建造者。未来,随着软件系统的复杂度增加,建造者模式的应用将更加广泛,我们需关注其性能问题和设

新手村长的专栏 4595

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

23种设计模式之建造者模式(Builder Pattern)

本篇文章将23种设计模式中的建造者模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 2万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。何时使用:一些基本部件不会变,而其组合经常变化的时候。如何解决:将变与不变分离开。关键代码:建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系。

weixin_42294716的博客 1316

彻底搞懂设计模式DesignPattern-建造者模式

基本介绍 建造者模式(Builder Pattern) 又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。 建造者模式 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们, 用户不需要知道内部的具体构建细节。 在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。 方便用户创建复杂的对象(不需要知道实现过程) 代码复用性 & 封装性(将对象构建过程和细节进

Ping 421

Java设计模式|建造者模式Builder Pattern

Java设计模式|建造者模式Builder Pattern 前言: 在日常生活中,我们可能会遇到这一类型的需求,例如一个实体类里有很多个属性,但是我们只想要其中的几种组合成一个新的对象,这个时候就可以使用建造者模式了,它提供了一种创建对象的最佳方式。建造者模式虽然比较好用,但是大家平时写代码的时候要谨记,不要滥用设计模式,不然的话可能会适得其反啊! 建造者模式 介绍:建造者模式又被称呼为生成器模式,这种类型的设计模式属于创建型模式,使用多个简单的对象一步一步构建成一个复杂的对象,将一个复杂对象的构建与它

QAQFyl的博客 547

设计模式之建造者模式(BuilderPattern)

一.意义 将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 说明:复杂对象的构建,比如一个对象有几十个成员属性,那么我们在创建这个对象,并给成员属性赋值时,就会很麻烦。采用建造者模式,就是把创建对象并给成员属性赋值的工作,分离出来,由建造者角色来完成,业务程序员直接调用导演类,获得复杂对象即可,无需再进行对象的创建工作了。 二.角色 建造者模式涉及到一下几种角色: Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,在该接口中一般声明两类方

敲代码的小小酥的博客 415

设计模式——建造者模式(BuilderPattern)

建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 UML图:

雪夜&流星的专栏 571

Android常见设计模式——建造者模式(Builder Pattern)

文章目录1. 建造者模式2. 建造者模式的简单案例 在23种常见设计模式概述——GoF 23(四人帮,Gang of Four)一文中提到过设计模式可以分为三种类型,分别为 创建型模式 结构型模式 行为型模式 1. 建造者模式 这里介绍的建造者模式(Builder Pattern)属于第一中类型,即创建型模式。 建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 它将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成(像零件的组装过程)。它将

梦否 1330

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

定义 建造者模式(Builder Pattern):将复杂对象的构造与其表示分离,以便相同的构造过程可以创建不同的表示。 主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。 想象一个角色扮演游戏的角色生成器。最简单的选择是让计算机为您创建角色。...

易兒善 474

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

建造者模式 定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。 类型 创建型。 适用场景 需要生成的产品对象有复杂的内部结构,这些产品对象具备共性。 隔离复杂对象的创建和使用,并使得相同的构建过程可以创建不同的产品。 建造者模式与抽象工厂...

kaven 4809

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

建造者模式(Builder Pattern)是将一个复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。

TechNomad的博客 1020
上一篇: 设计模式之工厂模式
下一篇: 设计模式之代理模式
Tracy林立颖
博客等级 码龄12年 9粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值