创造者设计模式

news2024/11/19 6:32:03

 

 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);
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【京东API】商品详情+搜索商品列表接口

利用电商API获取数据的步骤 1.申请API接口:首先要在相应电商平台上注册账号并申请API接口。 2.获取授权:在账号注册成功后,需要获取相应的授权才能访问电商API。 3.调用API:根据电商API提供的请求格式,通过编程实现…

如何使用Servlet写一个简单的网站

文章目录 前言1. 创建项目2. 引入依赖3. 创建目录4. 编写代码5. 打包程序6. 部署7.验证程序将 tomcat 集成到 idea 中 前言 前面我们学习了Java中常用的 HTTP 服务器 tomcat 的安装和使用,那么今天我们将使用这个 HTTP 服务器为大家写一个简单的网站,这…

Linux之输入输出重定向和管道

一、是什么 linux中有三种标准输入输出,分别是STDIN,STDOUT,STDERR,对应的数字是0、1、2: STDIN 是标准输入,默认从键盘读取信息STDOUT 是标准输出,默认将输出结果输出至终端STDERR 是标准错误…

新版软考高项试题分析精选(三)

请点击↑关注、收藏,本博客免费为你获取精彩知识分享!有惊喜哟!! 1、项目整体管理要综合考虑项目各个相关过程,围绕整体管理特点,以下说法中,( )是不正确的。 A.项目的…

【2021集创赛】 RISC-V杯三等奖:基于E203 处理器的SM4算法硬件加速

杯赛题目:基于蜂鸟E203 RISC-V处理器内核的SoC设计 参赛要求:研究生组/本科生组 赛题内容: 基于芯来科技的开源蜂鸟E203 Demo SoC进行扩展,在限定的可编程逻辑平台上构建面向专用应用领域(譬如人工智能、信息安全、工业…

194. 二叉树的最近公共祖先

题目 题解 递归 def lowestCommonAncestor(root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:if not root or root p or root q:return rootleft lowestCommonAncestor(root.left, p, q)right lowestCommonAncestor(root.right, p, q)if not left:return right…

2.4G射频收发芯片XL2400P,收发一体,性能优异

XL2400P 系列芯片是工作在 2.400~2.483GHz 世界通用 ISM 频段的单片无线收发芯片。该芯片集成射频收发机、频率收生器、晶体振荡器、调制解调器等功能模块,并且支持一对多组网和带 ACK 的通信模式。发射输出功率、工作频道以及通信数据率均可配置。芯片已将多颗外围…

全志R128基础组件开发指南——图像采集

图像采集 CSI(DVP) 图像采集 SENSOR -> CSI 通路 CSI (CMOS sensor interface)接口时序上可支持独立 SYNC 和嵌入 SYNC(CCIR656)。支持接收 YUV422 或 YUV420 数据。 VSYNC 和HSYNC 的有效电平可以是正极性,也可…

常用网络命令(实习报告)

南京信息工程大学 实验(实习)报告 实验(实习)名称 常用网络命令 实验(实习)日期 2017/5/25 得分 指导教师 *** 专业 网络工程 年级 2015 班次 1 姓名 *** …

Mybatis报错找不到参数解决之编译保留参数名称

Hi, I’m Shendi Mybatis报错找不到参数解决之编译保留参数名称 需求场景 在使用 Mybatis 的过程中,对于函数参数,通常会加上 Param 注解来给参数命名,以让 Mybatis 找到参数。 有的时候忘记添加,执行时就会报找不到参数的错误&…

spring cloud之网关

Gateway网关(*) 什么是网关 # 1.说明 - 网关统一服务入口,可方便实现对平台众多服务接口进行管控。 - 网关 路由转发 过滤器路由转发:接收一切外界请求,转发到后端的微服务上去过滤器:在服务网关中可以完成一系列的横切功能&a…

学Diffusion前需要储备的一些知识点

自学Diffusion是非常困难的,尤其是到了VAE和VI这里基本找不到比较好的中文资料,甚至是涉及到一些重参数化,高斯混合之类的问题摸不着来龙去脉。在本文中,基本不会涉及公式,只有intuition和理解,如果要看公式…

Pytorch CUDA CPP简易教程,在Windows上操作

文章目录 前言一、使用的工具二、学习资源分享三、libtorch环境配置1.配置CUDA、nvcc、cudnn2.下载libtorch3.CLion配置libtorch4.CMake Application指定Environment variables5.测试libtorch 四、PyTorch CUDA CPP项目流程1.使用CLion结合torch extension编写可以调用cuda的C代…

推介会如何做好媒体宣传

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 推介会是一种专为企业、社会组织和团体、政府等提供的展示自身特点、产品和政策的活动形式,旨在促进交流活动,形成合作,从而带来共同利益。推介会的本…

硬盘分区后数据还能恢复吗?答案揭晓!

“前两天刚给我的电脑硬盘分了区,但今天在查找数据时却发现某些数据丢失了。硬盘分区导致的数据丢失还有机会找回吗?怎么操作呢?请帮帮我!” 在使用电脑时,可能由于电脑需要重装系统,或者出现系统崩溃的情况…

天气越来越寒冷,一定要注意保暖

你们那里下雪了吗?听说西安已经下了今年的第一场雪,我们这里虽然隔了几百公里,但是只下雨没有下雪,不过气温是特别的冷,尤其是对我们这些上班族和上学的人而言,不管多冷,不管刮风下雨&#xff0…

InputStream和OutputStream

文章目录 💡FileInputStream 构造方法💡InputStream 常用方法💡OutputStream 概述💡OutputStream 常用方法💡PrintWriter💡小程序练习 使用字节流进行读/写操作时,是以字节为单位的;…

Python如何使用Matplotlib模块的pie()函数绘制饼形图?

Python如何使用Matplotlib模块的pie函数绘制饼形图? 1 模块安装2 实现思路3 pie()函数说明4 实现过程4.1 导入包4.2 定义一个类4.3 读取数据并处理4.4 定义饼图绘制方法 5 完整源码 1 模块安装 先安装matplotlib: pip install matplotlib安装numpy模块…

Pandas教程(非常详细)(第六部分)

接着Pandas教程(非常详细)(第五部分),继续讲述。 三十一、Pandas Excel读写操作详解 Excel 是由微软公司开发的办公软件之一,它在日常工作中得到了广泛的应用。在数据量较少的情况下,Excel 对…

动手学深度学习——序列模型

序列模型 1. 统计工具1.1 自回归模型1.2 马尔可夫模型 2. 训练3. 预测4. 小结 序列模型是一类机器学习模型,用于处理具有时序关系的数据。这些模型被广泛应用于自然语言处理、音频处理、时间序列分析等领域。 以下是几种常见的序列模型: 隐马尔可夫模型…