typescript: Builder Pattern

/*** file: CarBuilderts.ts* TypeScript 实体类 Model* Builder Pattern* 生成器是一种创建型设计模式, 使你能够分步骤创建复杂对象。* https://stackoverflow.com/questions/12827266/get-and-set-in-typescript* https://github.com/Microsoft/TypeScript/wiki/Coding-guidelines*/
class UserInfo {id!: number;userName!: string;email!: string;}/*** 车辆实体类*/class Car { //export/*** 序号*/id!: number;/*** 座位*/seats!: number;/*** 发动机*/engine!: string;/* constructor(id, seats,engine){this.id = id;this.seats = seats;this.engine=engine;}*//*** 序号* @returns  返回序号*/public  getId(): number { //getreturn this.id;}/*** 座位数* @returns 返回座位数*/public  getSeats(): number { //getreturn this.seats;}/*** 发动机* @returns 返回发动机型号名称*/public  getEngine(): string { //getreturn this.engine;}/*** 设置座位数* @param seats 输入数字座位数*/public setSeats(seats: number) //set{this.seats=seats;}/*** 设置发动机型号* @param engine 输入型号名称*/public setEngine(engine: string) //set{this.engine=engine;}/*** * @param id */public setId(id:number){this.id=id;}}/*** 继承*/
class Motorcycle extends Car
{/*  id!: number;seats!: number;engine!: string;constructor(id, seats,engine){this.id = id;this.seats = seats;this.engine=engine;}public  getId(): number { //getreturn this.id;}public  getSeats(): number { //getreturn this.seats;}public  getEngine(): string { //getreturn this.engine;}public setSeats(seats: number) //set{this.seats=seats;}public setEngine(engine: string) //set{this.engine=engine;}*/}
/*interface DuBuilder<Car>().id(1).setSeats("").setEngine("").build();
*//*** 接口extends Car*/
interface CBuilder {/*** * @param seats */setSeats(seats: number): this;/*** * @param engine */setEngine(engine: string): this;/*** * @param id */setId(id:number):this;}/*** 继承 Builder*/
class CarBuilder implements CBuilder {/*** 车信息类*/private car: Car;/*** 实例化*/constructor() {this.car = new Car();}/*** 设置座位数* @param seats 座位号* @returns 返回座位号*/public setSeats(seats: number): this {//this.car.setSeats(seats);this.car.setSeats(seats);return this;}/*** 设置发动机型号* @param engine 发动机型号名称* @returns */public setEngine(engine: string): this {this.car.setEngine(engine);return this;}/*** id 序号* @param id * @returns */public setId(id:number):this{this.car.setId(id);return this;}/*** 得到实体* @returns 返回车信息类*/public getResult(): Car {return this.car;}}/*** *  */ 
class MotorcycleBuilder implements CBuilder {/*** */private motorcycle: Motorcycle;/*** */constructor() {this.motorcycle = new Motorcycle();}/*** * @param seats * @returns */public setSeats(seats: number): this {this.motorcycle.setSeats(seats);return this;}/*** * @param engine * @returns */public setEngine(engine: string): this {this.motorcycle.setEngine(engine);return this;}/*** * @param id * @returns */public  setId(id: number): this {this.motorcycle.setId(id);return this;}/*** * @returns */public getResult(): Motorcycle {return this.motorcycle;}}/*** */class DuDirector {/*** * @returns */public buildFerrari(): Car {return new CarBuilder().setId(1).setSeats(2).setEngine("V-12").getResult();}/*** * @returns */public buildToyota(): Car {return new CarBuilder().setId(2).setSeats(7).setEngine("V-6").getResult();}/*** * @returns */public buildHonda(): Motorcycle {return new MotorcycleBuilder().setId(3).setSeats(2).setEngine("V-4").getResult();}/*** * @returns */public buildYamaha(): Motorcycle {return new MotorcycleBuilder().setId(4).setSeats(1).setEngine("V-2").getResult();}}/*** */const directorBu = new DuDirector();directorBu.buildFerrari();
directorBu.buildToyota();directorBu.buildHonda();
directorBu.buildYamaha();const car = new CarBuilder().setSeats(2).setEngine("V-12").getResult();const motorcycle = new MotorcycleBuilder().setId(100).setSeats(2).setEngine("V-4").getResult();let pucarid=""+motorcycle.getId();
let pucar1=""+motorcycle.getSeats();
let pucar2=""+motorcycle.getEngine();let messageCar: string = 'Hello World,This is a typescript!,涂聚文 Geovin Du Web';
document.body.innerHTML = messageCar+"<br/>,id:"+pucarid+",座位数:"+pucar1+",发动机型号:"+pucar2+","+car.getSeats()+","+car.getEngine()+","+directorBu.buildFerrari().getEngine()+",TypeScript 生成器方法模式";
console.log(motorcycle.getId());
console.log(motorcycle.getSeats());
console.log(motorcycle.getEngine());

调用:

<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><head><title>TypeScript:生成器模式</title><meta name="Description" content="geovindu,涂聚文,Geovin Du"/>
<meta name="Keywords" content="geovindu,涂聚文,Geovin Du"/>
<meta name="author" content="geovindu,涂聚文,Geovin Du"/>  </head><body><script src="dist/CarBuilderts.js"></script></body>
</html>

输出:

“The best strategy in life is diligence."         --Chinese Proverb

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

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

相关文章

想要精通算法和SQL的成长之路 - 验证二叉树

想要精通算法和SQL的成长之路 - 验证二叉树 前言一. 验证二叉树1.1 并查集1.2 入度以及边数检查 前言 想要精通算法和SQL的成长之路 - 系列导航 并查集的运用 一. 验证二叉树 原题链接 思路如下&#xff1a; 对于一颗二叉树&#xff0c;我们需要做哪些校验&#xff1f; 首先…

(二)正点原子STM32MP135移植——TF-A移植

目录 一、TF-A概述 二、编译官方代码 2.1 解压源码 2.2 打补丁 2.3 编译准备 &#xff08;1&#xff09;修改Makfile.sdk &#xff08;2&#xff09;设置环境变量 &#xff08;3&#xff09;编译 三、移植 3.1 复制官方文件 3.2 修改电源 3.3 修改TF卡和emmc 3.4 添…

学习记忆——方法篇——联想法+记忆宫殿+数字编码

左右脑在记忆当中的不同特点&#xff1a; 左脑是我们的理性脑。主要功能是处理逻辑内容、以及数字、文字等信息&#xff0c;擅长对知识的分析、理解、归纳、整合。缺点是处理信息速度慢、效率低&#xff0c;死记硬背就是用左脑记忆。 右脑是我们的感性脑。主要功能是处理节奏、…

2.2.2搭建交叉编译器

1 交叉编译器 交叉编译的存在,有2个原因,1个是不同的平台,架构不同,使用的指令集不同,ARM和MIPS的CPU无法运行X86指令休编码的程序,1个是一般arm平台上的存储/性能有限,无法提供一个可靠的编译环境。所以就出现了在x86上编译,在arm上运行的镜像,即交叉编译。在交叉编…

Linux多线程网络通信

思路&#xff1a;主线程&#xff08;只有一个&#xff09;建立连接&#xff0c;就创建子线程。子线程开始通信。 共享资源&#xff1a;全局数据区&#xff0c;堆区&#xff0c;内核区描述符。 线程同步不同步需要取决于线程对共享资源区的数据的操作&#xff0c;如果是只读就不…

网络是什么?(网络零基础入门篇)

1.如何理解局域网和广域网&#xff1f; 2.路由器和交换机是怎么样工作的&#xff1f; 3.三层交换机能不能代替路由器&#xff1f; -- 局域网 广域网 -- 企业网架构&#xff0c;运营商架构&#xff0c;数据中心架构 -- 局域网 通过 交换机连接的 转发 相同的ip地址…

stable diffusion学习笔记【2023-10-2】

L1&#xff1a;界面 CFG Scale&#xff1a;提示词相关性 denoising&#xff1a;重绘幅度 L2&#xff1a;文生图 女性常用的负面词 nsfw,NSFW,(NSFW:2),legs apart, paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, (…

ubuntu下源码编译方式安装opencv

基础条件 ubuntu 20.04 opencv 3.4.3 opencv 源码编译的安装步骤 第一步&#xff0c; 首先clone源码 git clone https://github.com/opencv/opencv.git第二步&#xff0c;依赖包&#xff0c;执行下面的命令 sudo apt-get install build-essential sudo apt-get install cmak…

使用华为eNSP组网试验⑸-访问控制

今天练习使用华为sNSP模拟网络设备上的访问控制&#xff0c;这样的操作我经常在华为的S7706、S5720、S5735或者H3C的S5500、S5130、S7706上进行&#xff0c;在网络设备上根据情况应用访问控制的策略是一个网管必须熟练的操作&#xff0c;只是在真机上操作一般比较谨慎&#xff…

机器学习必修课 - 如何处理缺失数据

运行环境&#xff1a;Google Colab 处理缺失数据可简单分为两种方法&#xff1a;1. 删除具有缺失值的列 2. 填充 !git clone https://github.com/JeffereyWu/Housing-prices-data.git下载数据集 import pandas as pd from sklearn.model_selection import train_test_split导…

微信公众号模板消息First,Remark字段不显示,备注字段不见了

今天在开发公众号过程中有个需求发模板消息我设置的如下 成绩单打印通知&#xff01;姓名&#xff1a;{{name.DATA}} 学号&#xff1a;{{stuid.DATA}}状态&#xff1a;{{status.DATA}}时间&#xff1a;{{date.DATA}} 备注&#xff1a;{{remark.DATA}} 然后发完通知发现《…

天地无用 - 修改朋友圈的定位: 高德地图 + 爱思助手

1&#xff0c;电脑上打开高德地图网页版 高德地图 (amap.com) 2&#xff0c;网页最下一栏&#xff0c;点击“开放平台” 高德开放平台 | 高德地图API (amap.com) 3&#xff0c;在新网页中&#xff0c;需要登录高德账户才能操作。 可以使用手机号和验证码登录。 4&#xff0c…

制作 3 档可调灯程序编写

PWM 0~255 可以将数据映射到0 75 150 225 尽可能均匀电压间隔

5个适合初学者的初级网络安全工作,网络安全就业必看

前言 网络安全涉及保护计算机系统、网络和数据免受未经授权的访问、破坏和盗窃 - 防止数字活动和数据访问的中断 - 同时也保护用户的资产和隐私。鉴于公共事业、医疗保健、金融以及联邦政府等行业的网络犯罪攻击不断升级&#xff0c;对网络专业人员的需求很高&#xff0c;这并…

计算机网络 (中科大郑烇老师)笔记(一)概论

目录 0 引言1 什么是Internet&#xff1f;1.1 网络、计算机网络、互联网1.2 什么是Internet&#xff1f;&#xff1a;从服务角度看 2 什么是协议&#xff1f;3 网络的结构&#xff08;子系统&#xff09;3.1 网络边缘3.2 网络核心&#xff1a;分组交换、线路交换3.3 接入网、物…

【软件测试】软件测试的基础概念

一、一个优秀的测试人员需要具备的素质 技能方面&#xff1a; 优秀的测试用例设计能力&#xff1a;测试用例设计能力是指&#xff0c;无论对于什么类型的测试&#xff0c;都能够设计出高效的发现缺陷&#xff0c;保证产品质量的优秀测试用例。这就需要我们掌握设计测试用例的方…

GPT系列论文解读:GPT-2

GPT系列 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一系列基于Transformer架构的预训练语言模型&#xff0c;由OpenAI开发。以下是GPT系列的主要模型&#xff1a; GPT&#xff1a;GPT-1是于2018年发布的第一个版本&#xff0c;它使用了12个Transformer…

关于内存对齐你需要了解的事

简介 这篇文章的目的是带你了解什么是内存对齐&#xff0c;具体的内存对齐的细节、处理方式、不同架构则不会去详细讲解&#xff0c;只做科普文用。 1、什么是内存对齐 内存对齐和数据在内存中的位置有关。内存对齐以字节为单位进行&#xff0c;一个变量的内存地址如果正好等于…

代码随想录第35天 | ● 01背包问题,你该了解这些! ● 01背包问题—— 滚动数组 ● 416. 分割等和子集

01背包 题目 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 代码 function testWeightBagProblem (weight, value, size) {// 定义 d…

引入短信服务

一、阿里云短信服务 进入阿里云平台&#xff0c;然后选择短信服务&#xff0c;通过API发送短信(需要充值金额&#xff0c;几块钱就可以&#xff0c;我们仅仅是小规模项目) 找到openAPI 可以看到Java语言的代码模板&#xff0c;这个就是Java SendSMS短信服务的代码 创建Accessk…