展开

关键词

Builder

(3)产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用,这个使用建造者非常适合。 (4)当初始化一个对象特别复杂时,如参数多,且很多参数有默认值。 类和builder实现类public abstract class Builder { public abstract Builder setBoard(String mBoard); public abstract Builder setDisplay(String mDisplay); public abstract Builder setOS(); public abstract Computer create computer); }你会发现他和装饰类有点像,参考资料在这里: http:blog.csdn.netu010955843articledetails248759034.总结优点: (1)良好的封装性,使用建造者可以使客户端不必知道产品内部组成细节 缺点: (1)会产生多余的Builder对象及Director对象(这里被我简化了),消耗内存。

42730

Builder

它既能保证像重叠构造器那样的安全性,也能保证像JavaBean那么好的可读性。这就是BuilderBuilder的优点:1.使用Builder必然会导致写两遍相关属性的代码和setter方法,看起来有点吃力不讨好。然而需要看到的是,客户端代码的可用性和可读性得到了大大提高。 2.Builder十分灵活,可以利用单个builder构建多个对象,还可在创建期间进行调整根据对象的不同进行改变。Builder的缺点:1.为了创建对象,必须先创建它的构建器。 2.Builder还比重叠构造器更加冗长,最好在4个或4个以上的参数才使用。在我的Builder实现中,我会用Builder的构造函数而不是set方法传递客户需要的属性。 与使用传统的重叠构造器相比,使用Builder的客户端代码更易于编写和阅读,构建器也比JavaBean更加安全。

39050
  • 广告
    关闭

    云产品限时秒杀

    云服务器1核2G首年38元,还有多款热门云产品满足您的上云需求

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    生成器(Builder

    生成器(Builder)Intent封装一个对象的构造过程,并允许按步骤构造。

    5520

    设计--Builder的思考

    ,创建与填值.对修改开放,该暴露了过多set方法,使得任意能获取到该实例的地方都可以随意修改器内容,对于全局性的config实例或者其他单例实例这是致命的缺点.Builder有句话说得好,遇到难以解决的问题就加一层中间层来代理抽象 .Builder如此,对象本身创建麻烦,那么就使用一个代理对象来主导创建与检验,兼顾了重叠器的安全性以及JavaBean的灵活性. public class Configuration ,还需要点进去才能知道每一个参数的意义,在这样的情况下Builder就是一个很好的解决方. public final class MappedStatement { private String 来控制,代码中把其构造函数声明为包级别权限 MappedStatement() { constructor disabled}总结Builder本质上是一种特殊的工厂,按照流水线方调用,然后最后检查产品是否合格 ,流水线之间可以任意组合,达到了高度的灵活性.参考Effective Java : 遇到多个构造器参数时考虑构建器(Builder)

    46490

    Builder剖析示例

    剖析创建型的设计。关注对象创建的过程与工厂的区别。工厂关注的是生产的结果,而Builder关注的是对象的创建过程。 而Builder则关心对象创建的细节,比如:组装一台电脑,所有的配置都可以自由的选择,每个不同的选择,最后出来的产品都不太一样。 用工厂来说,他可以找土工工程的公司(Factory),公司作为工厂给他盖这栋房子,这个产品。用Builder来说,盖房子的时候还要关注材料的选择,大小等等需要用户确定。 然后设计师下面有一个团队(Builder),来具体盖房子,比如瓦匠、搬砖(部件)的等等,而具体盖房子的流程则有设计师来主导。 这个开发流程符合设计的基本原则。

    17730

    Rust 构建器(Builder

    ,即可 灵活构造 目标结构:let mut builder = CounterBuilder::default(); ... 可能还要等待别的操作完成后再进行构建 let counter = builder.build();为什么使用构造器构造过程可控。 通常实现构造器的时候,我们会将构造器所需要配置的属性设置为私有,并且只能通过我们提供的属性设置方法进行设置,使得构造过程可控。另外,可以通过属性设置方法提前恐慌(panic)来阻止生成无效对象。 当某一属性的设置方法内部实现发生变化的时候,不影响其他属性的设置方;而新增属性及其设置方法时,可以通过链调用很方便地增加新属性的设置。 为什么不使用构造器构造器由于有以下缺点而在部分场景中不适用:在构造完成前无法使用被构造对象。在构造完成之前,构造器并不生成被构造对象,因此在整个构造设置完成之前,无法使用被构造对象。

    52720

    Android设计Builder详解

    Builder使用链结构创建复杂对象,将过程与结果分开,创建过程中可以自行组合。 使用场景一个对象,不同组合,不同顺序生成不同的结果 优点:封装性更规范,程序调用不用关系内部细节,注重结果即可 缺点:如果builder对象过多,会加大内存消耗public class TabInfoBean

    9621

    Android设计Builder解析

    在日常开发过程中时常需要用到设计,但是设计有23种,如何将这些设计了然于胸并且能在实际开发过程中应用得得心应手呢?和我一起跟着《Android源码设计解析与实战》一书边学边应用吧! 今天我们要讲的是Builder(建造者)定义将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示 使用场景当初始化一个对象特别复杂时,如参数多,且很多参数都具有默认值时 相同的方法 类中,并且每个set方法都返回自身,以便进行链调用 实现方下面以我们的图片加载框架ImageLoder为例来看看Builder的好处未采用Builder的ImageLoaderpublic 来改造ImageLoader首先是把ImageLoader的设置都放在单独的配置类里,每个set方法都返回this,从而达到链调用的目的 public class ImageLoaderConfig ,可以避免过多的set方法,同时把配置过程从目标类里面隔离出来,代码结构更加清晰 Builder比较常用的实现形是通过链调用实现,这样更简洁直观 源码地址:https:github.comsnowdream1314ImageLoader

    15210

    简单易懂的Builder

    Builder设计专门为这种场合使用! 现在我们以builder改造我们的返回实体类:public class OrderInfo { private Integer id; private String status; private payState; public Builder() { order = new OrderInfo(); } public Builder state(String state) { this.state = state; return this; } public Builder pay(String payState) { this.payState = payState; return this; 把原先需要在service层进行的逻辑判断移到了自身的builder方法中,如果以后又要更改状态或者逻辑的话service层可以不改动或者很小,只改动OrderInfo的内部类Builder就可以了,而且整个代码看起来也更清晰

    7930

    6.设计--建造者(Builder)

    1.场景 建造者也是一种创建型型,是将一个复杂的对象的构建与他的表示分离。 3.使用建造者静态内部类方 此看到这个你可能非常熟悉,这不就是lombok中的@builder注解的使用方吗?没错实际上lombok也是使用的静态内部类的建造者实现的。 2.传统建造者结构图 Builder扮演的是建造者的角色,用于定义建造所需要的方法,NovelBuilder扮演的是具体的建造者角色是对Builder的具体实现,而Novel则是具体要构建的产品例如我们的小说 3.传统建造者实现 Builder扮演的是建造者的角色,用于定义建造所需要的方法。其中包括了书的标题,内容,编写完毕以及获取具体的书等方法。而具体的实现则是交给子类。 4.JDK中建造者实现 JDK中的建造者除了之前说的lombok使用静态内部类的方,还有就是使用StringBuffer类的append方法。

    8310

    设计之建造者Builder

    概念建造者Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计属于创建型,它提供了一种创建对象的最佳方。 一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。介绍意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 注意事项:与工厂的区别是:建造者更加关注与零件装配的顺序。 代码实现“builder.cpp”#includeusing namespace std;class Builder{public: virtual void BuildHead() {} virtual {} virtual void BuildLeftLeg() {} virtual void BuildRightLeg() {}};构造瘦人 class ThinBuilder : public Builder

    6320

    Java之Builder的设计实现

    hello,你好,很高兴在这里遇到你,今天我们要分享的一点是关于设计Builder。 之所以会写这篇文章,其实是有原因的,自己整理了一篇文章是关于Lombok的介绍和使用的文章,它里面涉及到了今天我们想要分享的设计Builder。 ok,我们下面看下Builder的示例程序好了。 Tips:左右滑动可以看完整代码信息。 在Worker类里面定义一个静态内部类Builder类,在静态内部类里面使用链编程的方为对应的属性进行赋值java开发人员需要掌握的链编程创建我们需要的Worker对象,最后输出我们创建的worker 信息,这就是Builder的使用了,是不是很方便。

    37020

    Android编程设计Builder实例详解

    本文实例讲述了Android编程设计Builder。 分享给大家供大家参考,具体如下:一、介绍Builder是一步一步创建一个复杂对象的创建型,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程。 四、Builder的UML类图角色介绍:Product产品类——产品的抽象类;Builder——抽象Builder类,规范产品的组建,一般是由子类实现具体的组建过程;ConcreateBuilder 六、Builder变种——链调用示例代码:public class User { private final String name; 必选 private final String cardID 时,大多都不是经典GOF的Builder,而是选择了结构更加简单的后者。

    13710

    看,Mockito如何搞定Builder的Fluent API

    建造者Builder是一种常用的设计,用于构建不同的产品类。 ; public Builder setName(String name){ this.name = name; return this; } public Builder setAddress(String builder; public String sayHello(){ return builder.setName(name).setAddress(address).sayHello(); }} 建造者引人注目的是它标志性的链方法调用 image.png不过问题来了,为了能匹配测试桩,需要逐个对链调用中的各个中间返回对象进行打桩。如果只是像这个案例的话,也就算了,如果碰到更为复杂的链方法调用,打桩的代码就会一大片。 ()).isEqualTo(hi); }} 通过 @Mock(answer = RETURNS_SELF) ,告诉Mockito来返回被mock的测试桩自身,这样就能支持链方法调用了。

    17110

    五、Apache Commons Configuration2.x别样的Builder:ConfigurationBuilder

    在1.x时,绝大多数情况下均使用new的方来创建Configuration实例,而作为“更时髦”的2.x版本,显然得尽量避免出现new关键字,那么怎么办?这就是本文要介绍的BuilderBuilder相信大家已经很熟悉了,虽然ConfigurationBuilder接口在1.x版本里也存在,但是一般情况下并不使用它。 说明:Commons Configuration它的builder可能和你熟知的使用上可能并不太一样,它并没有build()方法,而是getXXX,并且使用一个Map来管理各个属性… 题外话:Commons ----总结关于ConfigurationBuilder就介绍到这了,本文专门花篇幅专门介绍Builder,是想让各位接受:一般提供给你Builder构建器使用,那么就不建议你自己去new实例,尽量拥抱 Builder

    39720

    设计的征途—6.建造者(Builder

    建造者又称为生成器,它是一种较为复杂、使用频率也相对较低的创建型。建造者为客户端返回的不是一个简单的产品,而是一个由多个部件组成的复杂产品。 建造者Builder) 学习难度:★★★★☆ 使用频率:★★☆☆☆ 一、从游戏角色设计谈起 M公司游戏开发部想要开发一款名为Manulife群侠传的网络游戏,该游戏采用主流的RPG(角色扮演游戏) 二、建造者概述2.1 建造者关键定义 建造者Builder):将一个复杂对象的构建与它的表示相分离,使得同样的构建过程可以创建不同的表示。建造者是一种对象创建型。      从上图可以看出,建造者包含以下三类重要角色;  (1)Builder(抽象建造者):为创建一个产品对象的各个部件指定抽象接口,在其接口中一般包含两类方法:一类是BuildPartX(),用于创建复杂对象的各个部件   建造者与抽象工厂有点相似,但是建造者返回一个完整的复杂产品,而抽象工厂则返回一系列相关的产品。

    20740

    复习:GoF的23种设计Builder(创建型)

    Builder(生成)我们创建复杂的对象时,会使用到此Builder,定义:它可以将复杂对象的初始化过程 抽象出来,使这个抽象过程的不同实现方法可以构建不同的表现(属性)对象。 其实,还是有点绕,那就先认定一点builder==创建复杂对象,再往下看。? 灵魂作图 示例代码:public class BuilderTest { public static void main(String[] args) { Builder builder = new ConcreteBuilder2 ().toString()); 第二个对象 Builder builder1 = new ConcreteBuilder1(); Director director1 = new Director(builder1 builder; public Director(Builder builder) { this.builder = builder; } public ComPlexProduct getProduct

    18130

    编写高质量的代码——详解Builder

    this.age = age; return this; }在使用时 persion.setName(name).setEmail(email),setAge(10).setPhone(phone);这样倒是可以链调用 ,但是这个方案的问题在于破坏了单一职责原则,setAge方法既有副作用(改变了age变量,修改了对象的内部状态),又有返回值,实际上不是一个优雅的实现.既要有流畅的编程体验,又要优美的代码,这时就需要builder 了,典型的代码实现public class Person { private int age; private String name; private String email; private persion = Person.builder() .age(10) .name(name) .email(email) .phone(phone) .build();这样代码看起来漂亮很多现在的builder 是可变builder,因为每个方法都改变了自身的状态,并且return了this.我们也可以使用非可变的builder 例如 public PersonBuilder phone(String phone

    34460

    变种 Builder :优雅的对象构建方

    Builder 早有耳闻,今天就来详细了解一下。 优雅的构建方:变种 Builder 为了解决上述两种构建方,伟大的程序员们创造出了 变种 Builder 。 Android Studio 中使用插件自动生成 变种 Builder 代码第一步:下载插件 Inner Builder:? 总结经典的 Builder 定义为: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 Builder 在 Android 开发中演变出了 变种 Builder ,它除了具备经典构建者的功能,还简化了构建的过程,使得创建过程更加简单、直观。

    63190

    当构造方法参数过多时使用builder

    幸运的是,还有第三种选择,它结合了可伸缩构造方法的安全性和 JavaBean 的可读性。 它是 Builder 的一种形Builder 拟 Python 和 Scala 中的命名可选参数。为了简洁起见,省略了有效性检查。 要尽快检测无效参数,检查 builder 的构造方法和方法中的参数有效性。 Builder 非常适合类层次结构。 使用平行层次的 builder,每个嵌套在相应的类中。 抽象类有抽象的 builder;具体的类有具体的 builder。 而且,builder 比伸缩构造方法更冗长,因此只有在有足够的参数时才值得使用它,比如四个或更多。但是请记住,如果希望在将来添加更多的参数。 总而言之,当设计类的构造方法或静态工厂的参数超过几个时,Builder 是一个不错的选择,特别是如果许多参数是可选的或相同类型的。

    49330

    相关产品

    • 共享带宽包

      共享带宽包

      共享带宽包(BWP)是一种多IP聚合的计费模式 ,可大幅降低公网费用 。共享带宽包提供包月带宽 ,月 TOP5 消峰计费 ,月 95 消峰计费等多种计费模式 ,满足您不同业务场景。合理配置共享带宽包可帮您大幅降低公网费用 ,优化业务成本。

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭

      扫码关注云+社区

      领取腾讯云代金券