iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >Java链式编程与Builder(建造者)设计模式
  • 453
分享到

Java链式编程与Builder(建造者)设计模式

java开发语言 2023-09-25 10:09:22 453人浏览 泡泡鱼
摘要

一、链式编程 1.1.释义          链式编程,也叫级联式编程,调用对象的函数时返回一个this对象指向对象本身,达到链式效果,可以级联调用。  1.2.特点          可以通过一个方法调用多个方法,将多个方法调用链接起来,

一、链式编程

1.1.释义 

        链式编程,也叫级联式编程,调用对象的函数时返回一个this对象指向对象本身,达到链式效果,可以级联调用。 

1.2.特点 

        可以通过一个方法调用多个方法,将多个方法调用链接起来,形成一条“链式”,从而提高代码的可读性。 

 1.2.原理

        链式编程的原理是返回一个this对象,也就是返回对象本身,从而达到链式效果。 

1.3.优点 

        编程性强、代码简洁 、可读性强。

1.4.使用条件 

        方法返回当前对象,即返回this;或方法支持链式调用,即返回调用该方法的对象。 

1.4.1.使用示例 

import lombok.Data;@Datapublic class Sample {    private String param1;    private String param2;    private String param3;    public Sample setParam1(String param1) {        this.param1 = param1;        return this;    }    public Sample setParam2(String param2) {        this.param2 = param2;        return this;    }    public Sample setParam3(String param3) {        this.param3 = param3;        return this;    }}

 1.4.2.示例输出

二、String链式示例

2.1.源码 

         例如可以将某对象toString()转化为String后,或将String对象valueOf()赋值后,进行concat()拼接、replace()替换、substring()截取。符合的方法很多,大多数都能组装起来,使之符合链式编程。

三、StringBuffer和StringBuilder链式示例

3.1.源码 

3.2.使用示例 

        同时,Collection接口下的List的stream流,也是使用的链式编程,这里不做介绍。 

四、@Accessors注解开启链式编程 

4.1.源码 

@Target({ElementType.TYPE, ElementType.FIELD})@Retention(RetentionPolicy.SOURCE)public @interface Accessors {boolean fluent() default false;boolean chain() default false;String[] prefix() default {};}

 4.2.注解使用

@Data@Accessors(chain = true)public class Sample {    private String param1;    private String param2;    private String param3;}

        上述代码是对1.4.1中的示例代码进行的简化,可以看出,当使用注解时,不用自己再设计具体的链式实现,注解会开启链式操作。这个注解常用在spring中的实体类上。 

        同时,使用@Accessors(fluent = true)时,省略给对象赋值和取值时候得set、get前缀,可以直接用对象点出来元素,不用set。 

 4.3.测试

 五、使用Builder模式实现Java链式编程

        Builder模式是一种对象创建模式,允许我们创建一个对象,并设置其属性值。示例的Builder模式实现如下所示:        

public class Sample {    private String name;    private String gender;    private String age;    private Sample(){}    public static SampleBuilder builder() {        return new SampleBuilder();    }    public static class SampleBuilder {        private Sample sample = new Sample();        public SampleBuilder setName(String name) {            sample.name = name;            return this;        }        public SampleBuilder setGender(String gender) {            sample.gender = gender;            return this;        }        public SampleBuilder setAge(String age) {            sample.age = age;            return this;        }        public Sample build() {            return sample;        }    }}

        在上面的代码示例中,我们首先创建了一个Sample类。为了实现Builder模式,我们还创建了一个SampleBuilder类。SampleBuilder类中有两个with方法,分别用于设置name属性、gender属性和age属性。它们都返回SampleBuilder对象,这样就可以实现链式调用。在参数设置完成后,我们通过build方法创建Sample对象。使用Builder模式进行链式编程的示例如下:

         在上面的示例中,我们通过Sample.builder()创建了SampleBuilder对象,并使用其中的set方法设置参数。在设置完成后,我们通过build方法创建了Sample对象。

        上面这就是一个最简单的builder链式编程,简单在于,能成链能赋值,仅此而已。但如果需要取值,需要对参数校验,这个类就不够用了,需要补充更多的规定,这就抛砖引玉的引出了Java重要设计模式之一的建造者模式。

六、Builder(建造者)设计模式 

6.1.实用范围

        当创建复杂对象算法应该独立于该对象的组成部分以及它们的装配方式时。

        当构造过程必须允许被构造的对象有不同表示时。

 6.2.角色

        在这样的设计模式中,有以下几个角色:

        1 builder:为创建一个产品对象的各个部件指定抽象接口。

        2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。

        3 Director:构造一个使用Builder接口的对象。

        4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

 6.3.Builder 模式创建步骤

        1)在类中,创建一个静态内部类,包含外部类的全部属性;

        2)在内部类中,为每一个属性进行赋值;

        3)内部类中创建 build 方法,返回外部类对象

        4)在外部类中创建静态 builder方法,返回内部类对象

6.4.残次品示例 

public class Sample {    //Sample 类的属性都是不可变的。所有的属性都添加了final修饰符,在构造方法中设置了值。    private final String name;    private final String gender;    private final Double age;    //对外只提供getters方法。    public String getName() {        return name;    }    public String getGender() {        return gender;    }    public Double getAge() {        return age;    }    //Sample 类的构造方法是私有的。也就是说调用者不能直接创建User对象。    private Sample(SampleBuilder builder){        this.name = builder.name;        this.gender = builder.gender;        this.age = builder.age;    }    public static class SampleBuilder {        private String name;        private String gender;        private Double age;        public SampleBuilder SampleBuilder(){            return new SampleBuilder();        }        public SampleBuilder setName(String name) {            this.name = name;            return this;        }        public SampleBuilder setGender(String gender) {            this.gender = gender;            return this;        }        public SampleBuilder setAge(Double age) {            this.age = age;            return this;        }        public Sample build() {            //添加参数校验            Sample sample = new Sample(this);            if (sample.getAge() < 0 || sample.getAge() > 125){                throw new IllegalStateException("Age out of range:" + sample.getAge());            }            if (!("男".equals(sample.getGender()) || "女".equals(sample.getGender()))){                throw new IllegalStateException("Error Gender Input:" + sample.getGender());            }            return sample;        }    }}

         可以看到,基本链式编程形成,同时参数也会进行校验,符合要求。但之所以叫残次品,是因为这只是build链式开发,但说设计模式,明显“德不配位”。

6.5.简单示例

6.5.1.示例目录 

 

6.5.2.各层代码 

        建造者模式核心作用也就是优点,就是对复杂对象(特指某几个对象组合而成的对象)的创建,抽出来单独实现,对于用户使用这类复杂对象是提供了方便,同时,这也在复杂对象的部分创建与整体组装之间搭了一座桥,实现了部分和整体组装的解耦。

        建造者模式主要是用在复杂对象上的,对于简单对象,就毫无用武之地。但在此还是需要一些简单的对象,来帮助了解建造者模式。

Animal: 设置抽象属性

package com.test5;public class Animal {    //名字    private String name;    //时速    private Long speed;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Long getSpeed() {        return speed;    }    public void setSpeed(Long speed) {        this.speed = speed;    }}

AnimalBuilder : 

package com.test5;public interface AnimalBuilder {    void buildName();    void buildSpeed();    Animal builderAnimal();}

 AnimalDirector :

package com.test5;public class AnimalDirector {    public Animal constructAnimal(AnimalBuilder pb) {        pb.buildName();        pb.buildSpeed();        return pb.builderAnimal();    }}

 Eagle :创建角色1

package com.test5;public class Eagle extends Animal{}

EagleBuilder :建造角色1 

package com.test5;public class EagleBuilder implements AnimalBuilder{    Animal animal;    public EagleBuilder(){        animal = new Animal();    }   public void buildName(){        animal.setName("雄鹰");   }   public void buildSpeed(){        animal.setSpeed(80L);   }    public Animal builderAnimal(){        return animal;   }}

Rabbit :创建角色2 

package com.test5;public class Rabbit extends Animal{}

RabbitBuilder :建造角色2 

package com.test5;public class RabbitBuilder implements AnimalBuilder{    Animal animal;    public RabbitBuilder(){        animal = new Animal();    }   public void buildName(){        animal.setName("兔子");   }   public void buildSpeed(){        animal.setSpeed(70L);   }    public Animal builderAnimal(){        return animal;   }}

        每次添加新角色时,只需要新添加一个角色,然后为它添加一个建造,这样后面就可以使用了。 

测试: 

package com.test5;public class test {    public static void main(String[] args) {        AnimalDirector director = new AnimalDirector();        Animal eagle = director.constructAnimal(new EagleBuilder());        System.out.println(eagle.getName()+"的时速为:"+eagle.getSpeed());        Animal rabbit = director.constructAnimal(new RabbitBuilder());        System.out.println(rabbit.getName()+"的时速为:"+rabbit.getSpeed());    }}

结果示例: 

雄鹰的时速为:80兔子的时速为:70

来源地址:https://blog.csdn.net/weixin_52255395/article/details/131553891

--结束END--

本文标题: Java链式编程与Builder(建造者)设计模式

本文链接: https://www.lsjlt.com/news/417304.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java链式编程与Builder(建造者)设计模式
    一、链式编程 1.1.释义          链式编程,也叫级联式编程,调用对象的函数时返回一个this对象指向对象本身,达到链式效果,可以级联调用。  1.2.特点          可以通过一个方法调用多个方法,将多个方法调用链接起来,...
    99+
    2023-09-25
    java 开发语言
  • Java设计模式之建造者模式
    本文由老王家组装电脑引出——建造者设计模式,详细介绍建造者模式的基本概念和实现代码,为了便于理解建造者模式,我们会对实际应用中的典型案例进行介绍。最后对比工厂...
    99+
    2024-04-02
  • .Net创建型设计模式之建造者、生成器模式(Builder)
    目录一、动机(Motivation)二、意图(Intent)三、结构(Structure)四、模式的组成五、建筑者模式的具体实现六、建造者模式的实现要点1、建造者模式的优点:2、建造...
    99+
    2024-04-02
  • JAVA设计模式----建造者模式详解
    目录介绍角色代码演示通过反射创建建造者对象优点缺点适用场景总结介绍 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的...
    99+
    2024-04-02
  • java设计模式--建造者模式详解
    目录引例一般解法代码:AbstractHouse(房子)Bungalow(平房)Villa (别墅)客户端调用建造者模式建造者模式解法代码:House类(Product产品)Hous...
    99+
    2024-04-02
  • 设计模式之建造者模式
    文章目录 盖房项目需求传统方式解决盖房需求传统方式的问题分析建造者模式概述是建造者模式的四个角色建造者模式原理类图建造者模式的注意事项和细节 盖房项目需求 需要建房子:这一过程为打桩、砌墙、封顶房子有各种各样的,比如普通房,高楼...
    99+
    2023-08-30
    设计模式
  • C#设计模式之建造者模式
    场景:我们的冒险家,现在需要去武器商店买一把兵器,有刀和剑两种武器,冒险者可以告诉武器商人需要哪一种武器,然后武器商人进行锻造,最后把产品给冒险者,用建造者模式如何实现? 1.什么是...
    99+
    2024-04-02
  • java设计模式:建造者模式之生产线
    目录什么是建造者模式建造者模式中的角色产品角色(Product)抽象建造者(Builder)具体建造者角色(ConcreteBuilder)导演者角色(Director)最终测试总结...
    99+
    2024-04-02
  • Java设计模式的建造者模式是什么
    这篇文章主要介绍了Java设计模式的建造者模式是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java设计模式的建造者模式是什么文章都会有所收获,下面我们一起来看看吧。1、什么是建造者模式?我们知道在软件开...
    99+
    2023-06-29
  • Java创建型设计模式之建造者模式详解
    目录前言定义结构实现方法应用场景总结建造者模式是Java中一种创建型设计模式,它的主要目的是将一个复杂对象的构建过程分解为多个简单对象的构建过程,并且使这些构建过程按照一定的顺序进行...
    99+
    2023-05-19
    Java建造者模式 Java建造者模式实践 Java创建型设计模式
  • 怎么理解Java设计模式的建造者模式
    本篇内容介绍了“怎么理解Java设计模式的建造者模式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、什么是建造者模式建造者模式也称生成器模...
    99+
    2023-06-25
  • 深入理解Java设计模式之建造者模式
    目录一、什么是建造者模式二、建造者模式的应用场景三、建造者模式的优缺点四、工厂模式和建造者模式的对比五、建造者模式的实现六、总结一、什么是建造者模式 建造者模式也称生成器模式 定义:...
    99+
    2024-04-02
  • Java设计模式之建造者模式实例详解
    本文实例讲述了Java设计模式之建造者模式。分享给大家供大家参考,具体如下:建造者模式(builder)可以将部件和其组装过程分开.一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节.什...
    99+
    2023-05-31
    java 设计模式 建造者模式
  • Java设计模式之建造者模式的示例详解
    目录定义案例需求方案一方案二对比分析总结建造者模式的优势:注意点 定义 建造者模式(Builder Pattern),又叫生成器模式,是一种对象构建模式 它可以将复杂对象的建造过程抽...
    99+
    2024-04-02
  • Java 深入理解创建型设计模式之建造者模式
    1.提出问题 假如说,我们需要建房子:这一过程为打桩、砌墙、封顶。房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的.3)请编写程序,完成需求。 传...
    99+
    2024-04-02
  • Python 设计模式中的创建型建造者模式
    目录一、建造者模式二、代码示例一、建造者模式 建造者模式,顾名思义类似于建筑工人,他们按照有条理的施工顺序(e.g. 打桩 => 浇筑框架 => 砌墙 => 装修)...
    99+
    2024-04-02
  • Java设计模式笔记之Builder模式
    目录Builder模式是怎么来的关于Builder的一点说明线程安全问题经典的Builder模式总结当我第一次使用Picasso的时候,看见下面的官网示例时,我和我的小伙伴都惊呆了!...
    99+
    2024-04-02
  • Java中常用的设计模式之建造者模式详解
    目录优点缺点使用场景一、实现方式二、实现方式1、引入依赖2、实现三、测试总结优点 1.建造者独立,易扩展。 2.便于控制细节风险。 缺点 1.产品必须有共同点,范围有限制。 2.如内...
    99+
    2024-04-02
  • Java通俗易懂系列设计模式之建造者模式
    目录介绍意图定义实例使用场景JDK中的Builder设计模式示例总结介绍 今天我们将研究java中的Builder模式。Builder 设计模式是一种创造性的设计模式,如工厂模式和抽...
    99+
    2024-04-02
  • 理解JavaScript设计模式中的建造者模式
    我们在前面已经提过设计模式创建型模式的 3 种工厂模式 和 单例模式;本篇带来同属创建型模式的“建造者模式” 建造者模式(Builder Pattern)使...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作