创造者设计模式

 

 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;}@Overridepublic 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{@Overridepublic void buildFrame() {bike.setFrame("碳纤维车架");}@Overridepublic void buildSeat() {bike.setSeat("真皮车座");}@Overridepublic Bike createBike() {return bike;}
}

OfoBuilder

package com.jmj.pattern.builder.demo01;public class OfoBuilder extends Builder{@Overridepublic void buildFrame() {bike.setFrame("铝合金车架");}@Overridepublic void buildSeat() {bike.setSeat("橡胶车座");}@Overridepublic 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;};@Overridepublic 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.mzph.cn/news/142670.shtml

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

相关文章

华纳云:WordPress如何制作CMS栏目块

WordPress作为一个强大的内容管理系统(CMS),允许你自定义并创建各种栏目块。你可以使用插件、主题功能或自定义开发来实现这一点。下面是一些基本方法: 1. 使用页面模板和自定义字段 创建自定义页面模板: 创建一个新的页面模板,例…

Windows客户端开发框架WPF简介

一、WPF简介 WPF的全称是Windows Presentation Foundation,WPF是 Microsoft 提供的一种用于构建桌面应用程序的 UI 框架。它包含在 .NET Framework 中,从 .NET 3.0 版本开始就被引入。 以下是一些关于 WPF 的关键特性: 1. XAML&#xff1a…

【git】解决git报错:ssh:connect to host github.com port 22: Connection timed out 亲测有效

如题,git使用中突然报错 ssh:connect to host github.com port 22: Connection timed out 通过查阅各种资料,得知原因可能是由于电脑的防火墙或者其他网络原因导致ssh连接方式 端口22被封锁。 解决方法 一:抛弃ssh连接方式,使…

深度学习实战59-NLP最核心的模型:transformer的搭建与训练过程详解,手把手搭建与跑通

大家好,我是微学AI,今天给大家介绍一下深度学习实战59-NLP最核心的模型:transformer的搭建与训练过程详解,手把手搭建与跑通。transformer是一种基于自注意力机制的深度学习模型,由Vaswani等人在2017年的论文《Attention is All You Need》中提出。它最初被设计用来处理序…

centos 6.10 编译 zstd 库

从 github 上下载最新的源码。下载链接 进入到 zstd-dev 目录下 执行下面命令 cd /build/cmake mkdir build && cd build cmake .. make我遇到了报错: timefn.c:(.text0x5e): undefined reference to clock_gettime原因是 centos 6.10 的 glibc 版本太老…

什么叫做一站式解决方案?

一站式解决方案(One-stop solution)是指为客户提供从项目起始到完成的全过程服务的经营模式。这种方案通常由某个服务提供商或公司实施,目的是解决客户的各种问题,同时省去客户寻找多个供应商合作的麻烦。一站式服务可能包括咨询、…

【luckfox】0、开发环境搭建

前言 本章简单介绍如何搭建luckfox的开发环境。 一、抓取luckfox源码 需要提前准备好ubuntu环境。 git clone https://github.com/LuckfoxTECH/luckfox-pico.git二、编译 youkaiubuntu:/home/luckfox/luckfox-pico$ ./build.sh lunchyoukaiubuntu:/home/luckfox/luckfox-p…

python数据处理作业11:建一个5*3的随机数组和一个3*2的数组,其元素为1,2,3,4,5,6,求两矩阵的积

每日小语 打碎的杯子,烫伤的手,对菩萨是堪忍,因为他在里面得悟甚深之法,心生欢喜。 可是对一般人来说,一生何止打破千百个杯子?何止烫伤过千百次手?他只是痛苦地忍受,只记得下次要…

Linux--线程概念+线程控制

1.什么是线程 相对于进程而言,进程是承担资源调度的实体,线程在进程内部运行,是操作系统调度的基本单位。 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列…

【C#学习】文件操作

文章目录 常见操作拷贝文件检测文件夹是否存在并创建判断文件是否存在删除文件夹下的所有文件保留文件夹获取指定目录下的所有文件名删除 常见操作 拷贝文件 System.IO.File.Copy(sourcePath, targetPath); 检测文件夹是否存在并创建 //if directory not exit,then establis…

02-Spring中Bean的8种获取方式

Bean的获取方式 常见获取方式 虽然Spring为Bean对象的创建提供了多种实例化方式如由前期xml配置逐步演化成注解配置,但本质都是通过反射机制加载类名后创建对象,最后交给Spring管控 Spring还开放出了若干种可编程控制的bean的初始化方式,通过分支语句由固定的加载…

【Amazon】云上探索实验室—了解 AI 编程助手 Amazon Codewhisperer

文章目录 一、前言📢二、关于云上探索实验室🕹️三、领学员需要做什么?✴️四、领学员能获得什么?🔣五、学课通道入口👇1️⃣CSDN平台2️⃣网易云课堂3️⃣Skill Builder 平台 六、活动详情链接 一、前言&a…

Qt QWebEngine 加载网页及交互,实现C++与JS 相互调用

目录 前言1、QtWebEngine介绍2、安装3、核心类介绍3.1 QWebEngineView3.2 QWebEnginePage3.3 QWebEngineProfile3.4 QWebEngineHistory3.5 QWebEngineSettings 4、加载网页5、C调用JS5.1 无返回值5.2 有返回值 6、JS调用C6.1 新建WebObject 类继承自QObject。6.2 将WebObject对…

spring boot validation使用

spring-boot-starter-validation 是 Spring Boot 中用于支持数据验证的模块。它建立在 Java Validation API(JSR-380)之上,提供了一种方便的方式来验证应用程序中的数据。以下是使用 spring-boot-starter-validation 的基本方法: …

11 Go的作用域

概述 在上一节的内容中,我们介绍了Go的映射,包括:声明映射、初始化映射、操作映射等。在本节中,我们将介绍Go的作用域。在Go语言中,作用域是指变量的可见性范围,它定义了变量在程序中的生命周期和可访问性。…

c语言从入门到实战——基于指针的数组与指针数组

基于指针的数组与指针数组 前言1. 数组名的理解2. 使用指针访问数组3. 一维数组传参的本质4. 冒泡排序5. 二级指针6. 指针数组7. 指针数组模拟二维数组 前言 指针的数组是指数组中的元素都是指针类型,它们指向某种数据类型的变量。 1. 数组名的理解 我们在使用指针…

MongoDB是一个NoSQL数据库,有着多种不同的命令和操作。以下是一些常见的MongoDB命令:

show dbs:列出所有数据库use db_name:切换到指定的数据库db.dropDatabase():删除当前数据库db.createCollection("collection_name"):创建集合db.collection_name.insert(document):向指定集合插入数据db.co…

手机厂商参与“百模大战”,vivo发布蓝心大模型

在2023 vivo开发者大会上,vivo发布自研通用大模型矩阵——蓝心大模型,其中包含十亿、百亿、千亿三个参数量级的5款自研大模型,其中,10亿量级模型是主要面向端侧场景打造的专业文本大模型,具备本地化的文本总结、摘要等…

【PyQt】(自制类)处理鼠标点击逻辑

写了个自认为还算不错的类,用于简化mousePressEvent、mouseMoveEvent和mouseReleaseEvent中的鼠标信息。 功能有以下几点: 鼠标当前状态,包括鼠标左/中/右键和单击/双击/抬起鼠标防抖(仅超出一定程度时才判断鼠标发生了移动),灵…

【算法练习Day48】回文子串最长回文子序列

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 回文子串最长回文子序列总结…