创造者设计模式

 

 Bike

package com.jmj.pattern.builder.demo01;

public class Bike {

    private String frame;//车架
    private String seat;//车座

    public String getFrame() {
        return frame;
    }

    public void setFrame(String frame) {
        this.frame = frame;
    }

    public String getSeat() {
        return seat;
    }

    public void setSeat(String seat) {
        this.seat = seat;
    }

    @Override
    public String toString() {
        return "Bike{" +
                "frame='" + frame + '\'' +
                ", seat='" + seat + '\'' +
                '}';
    }
}

Builder

package com.jmj.pattern.builder.demo01;

public abstract class Builder {

    //声明bike类型的变量,并进行复制
    protected Bike bike=new Bike();

    public abstract void  buildFrame();

    public abstract void  buildSeat();


    public abstract Bike createBike();


}

MobileBuilder

package com.jmj.pattern.builder.demo01;
//具体的构建者,用来构建摩拜单车对象
public class MobileBuilder extends Builder{
    @Override
    public void buildFrame() {
        bike.setFrame("碳纤维车架");
    }

    @Override
    public void buildSeat() {
        bike.setSeat("真皮车座");
    }

    @Override
    public Bike createBike() {
        return bike;
    }
}

OfoBuilder

package com.jmj.pattern.builder.demo01;

public class OfoBuilder extends Builder{
    @Override
    public void buildFrame() {
        bike.setFrame("铝合金车架");
    }

    @Override
    public void buildSeat() {
        bike.setSeat("橡胶车座");
    }

    @Override
    public Bike createBike() {
        return bike;
    }
}

Director

package com.jmj.pattern.builder.demo01;

public class Director {

    //声明builder类型的变量
    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }

    //组装自行车
    public Bike construct(){
        builder.buildFrame();
        builder.buildSeat();
        return builder.createBike();
    }
}

Client

package com.jmj.pattern.builder.demo01;

public class Client {
    public static void main(String[] args) {
        //创建指挥者对象
        Director director = new Director(new OfoBuilder());
        //让指挥者指挥组装自行车
        Bike construct = director.construct();
        System.out.println(construct);

    }
}

另一种建造者模式

package com.jmj.pattern.builder.demo02;



public class Phone {
    private String cpu;
    private String screen;
    private String memory;
    private String mainboard;

    private Phone(Builder builder){
        this.cpu = builder.cpu;
        this.screen = builder.screen;
        this.memory = builder.memory;
        this.mainboard = builder.mainboard;

    };

    @Override
    public String toString() {
        return "Phone{" +
                "cpu='" + cpu + '\'' +
                ", screen='" + screen + '\'' +
                ", memory='" + memory + '\'' +
                ", mainboard='" + mainboard + '\'' +
                '}';
    }

    public static final  class Builder{
        private String cpu;
        private String screen;
        private String memory;
        private String mainboard;

        public Builder cpu(String cpu){
            this.cpu=cpu;
            return this;
        }

        public Builder screen(String screen){
            this.screen=screen;
            return this;
        }

        public Builder memory(String memory){
            this.memory=memory;
            return this;
        }

        public Builder mainboard(String mainboard){
            this.mainboard=mainboard;
            return this;
        }
        //使用构建者创建Phone对象
        public Phone build(){
            return new Phone(this);
        }
    }


}
package com.jmj.pattern.builder.demo02;

public class Client {
    public static void main(String[] args) {
        //创建手机对象
        Phone.Builder builder = new Phone.Builder();
        Phone build = builder.cpu("英特尔").mainboard("华硕").memory("金士顿").screen("hkc").build();
        System.out.println(build);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/146688.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Webpack Bundle Analyzer包分析器

当我们需要分析打包文件dist里哪些资源可以进一步优化时,就可以使用包分析器插件webpack-bundle-analyzer。NPM上的介绍是使用交互式可缩放树图可视化 webpack 输出文件的大小。 我的是vue2项目。 1、webpack-bundle-analyzer插件的安装 $ npm install --save-dev…

接口测试vs功能测试

接口测试和功能测试的区别: 本文主要分为两个部分: 第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系。但该部分只交代了怎么做和如何做?并没有解释为什…

Kyligence 入选 Gartner® 2023 客户之声报告,高分获评“卓越表现者”

近日,Gartner 发布了最新的《2023 分析和商业智能平台“客户之声”报告》(Voice of the Customer for Analytics and Business Intelligence Platforms, 2023, October 2023)。跬智信息(Kyligence)成功入选该报告,并凭借 4.7 分&a…

嵌入式养成计划-54----ARM--异常处理流程

一百三十五、异常处理流程 135.1 arm处理器工作模式 135.2 异常源和异常模式关系 135.2.1 异常源 异常源就是引发处理器进入相应异常模式 135.2.2 对应关系 异常模式异常源FIQ模式FIQ类型异常源引发处理器进入FIQ模式IRQ模式IRQ类型异常源引发处理器进入IRQ模式SVC模式上电…

opencv车牌识别<一>

目录 一、概述 二、ANPR简介 一、概述 本文将介绍创建自动车牌识别(Automatic Number Plate Recognition,ANPR)所需的步骤。对于不同的情形,实现自动车牌识别会用不同的方法和技术,例如,IR 摄像机、固定汽车位置、光照条件等…

spring cloud之配置中心

Config 统一配置中心(*) 1.简介 # 统一配置中心 - 官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-config/2.2.3.RELEASE/reference/html/#_spring_cloud_config_server- config 分为 config server 和 config client。用来统一管理所有微服务的配置统一配置…

【Python 千题 —— 基础篇】欢迎光临

题目描述 题目描述 欢迎光临。为列表中的每个嘉宾打印欢迎光临语句。例如,有一份嘉宾列表 ["李二狗", "王子鸣"],则需要根据嘉宾名单打印输出: 欢迎光临!李二狗。 欢迎光临!王子鸣。下面是一份…

基于JAX-WS的RESTful web服务返回通过JAXB注解生成的xml文档

基于JAX-WS编写的RESTful web服务,返回xml文档。这个xml文档可以基于JAXB注解的形式来生成,简化xml的生成。 例如,下面RegisterResponse 这个类使用了JAXB的注解: package com.thb.server.register;import jakarta.xml.bind.ann…

C语言--指针与数组--遍历数组的n种方式【详细】

一.一维数组名的含义 arr一般表示数组的其实地址(除了两种例外) 1.在定义数组的同一个函数中(不是形参),求sizeof(arr),求整个数组的字节数 2.在定义数组的同一个函数中(不是形参),&arr1,加整个数组的大小 (经常考试) 3.除上面以外,arr都表示数组的…

智能穿戴AR眼镜主板方案定制_MTK平台AR智能眼镜PCB板开发

AR智能眼镜,是采用了多种技术实现增强现实效果,是将虚拟信息和现实场景相结合的智能设备。 AR智能眼镜硬件上,包括多个传感器、显示装置和处理器等。其中,传感器用于捕捉用户的动作和环境信息,如摄像头、陀螺仪、加速…

【python】爬取酷狗音乐Top500排行榜【附源码】

一、导入必要的模块: 这篇博客将介绍如何使用Python编写一个爬虫程序,从斗鱼直播网站上获取图片信息并保存到本地。我们将使用requests模块发送HTTP请求和接收响应,以及os模块处理文件和目录操作。 如果出现模块报错 进入控制台输入&#xff…

Axure原型设计工具怎么样?有替代软件吗?

Axurerp是一种快速原型设计工具,可以制作高度互动的HTML原型。设计师不仅可以使用Axure绘制线框图和原型,还可以在Axurerp中完成一系列用户体验设计。在本文中,我们将根据用户体验设计师的真实经验,触发用户体验设计师的实际工作&…

(论文阅读30/100)Convolutional Pose Machines

30.文献阅读笔记CPMs 简介 题目 Convolutional Pose Machines 作者 Shih-En Wei, Varun Ramakrishna, Takeo Kanade, and Yaser Sheikh, CVPR, 2016. 原文链接 https://arxiv.org/pdf/1602.00134.pdf 关键词 Convolutional Pose Machines(CPMs)…

数据库管理-第116期 Oracle Exadata 06-ESS-下(202301114)

数据库管理-第116期 Oracle Exadata 06-ESS-下(202301114) 距离上一次正儿八经的技术分享又过了整整一周了,距离上一期Exadata专题文章也过了11天了,今天一鼓作气把ESS写完,毕竟明天又要飞北京了。 1 Smart Scan 其…

SpringCloud Alibaba(中):服务熔断降级-Sentinel

Sentinel Sentinel是阿里巴巴开源的分布式系统流量防卫防护组件,主要对分布式系统中的流量进行控制、熔断降级等保护操作。Sentinel的目标是成为互联网级别分布式系统的流量防卫防护组件,它与系统的各个部分集成,保护着系统的入口和出口。 …

【蓝桥杯选拔赛真题20】C++求正方形面积 第十二届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析

目录 C/C++求正方形面积 一、题目要求 1、编程实现 2、输入输出 二、算法分析

Hadoop3.3.4分布式安装

安装前提:已经配置好java环境,所有机器之间ssh的免密登录。 注意:下文中的flinkv1、flinkv2、flinkv3是三台服务器的别名 1.集群部署规划 注意:NameNode和SecondaryNameNode不要安装在同一台服务器 注意:ResourceMan…

软件测试/测试开发丨​利用人工智能ChatGPT批量生成测试数据

点此获取更多相关资料 简介 测试数据是指一组专注于为测试服务的数据,既可以作为功能的输入去验证输出,也可以去触发各类异常场景。 测试数据的设计尤为重要,等价类、边界值、正交法等测试用例设计方法都是为了更全面地设计对应的测试数据…

上机实验三 图的最小生成树算法设计 西安石油大学数据结构

二叉树设计 实验名称:二叉树设计 (1)实验目的: 1) 掌握二叉树的逻辑结构。 2) 掌握二叉树的二叉链表存储结构; 3) 掌握基于二叉链表存储的二叉树的遍历等操作的实现。 &#x…

F : DS图遍历--广度优先搜索

Description 给出一个图的邻接矩阵,对图进行广度优先搜索,从顶点0开始 注意:图n个顶点编号从0到n-1 如果图不连通,则对尚未访问的编号结点继续进行广度优先搜索,直到所有结点被访问 Input 第一行输入t&#xff0c…