从零玩转设计模式之简单工厂设计模式-jiandangonchangmoshi

title: 从零玩转设计模式之简单工厂设计模式
date: 2022-12-08 11:31:19.472
updated: 2022-12-11 23:03:34.805
url: http://www.yby6.com/archives/jiandangonchangmoshi
categories: 
- 设计模式
tags: 
- 设计模式

简单工厂模式是一种创建型设计模式,用于创建单个对象.

它主要由以下3个部分组成:

工厂类(Factory):负责创建单个对象。
抽象产品(Product):定义产品的接口。
具体产品(Concrete Product):实现抽象产品接口,提供具体的产品。
下面是一个简单的例子,展示了如何使用简单工厂模式创建一个汽车:


/**
 * 抽象产品(Product) 定义产品 需要实现的功能
 */
public interface Car {
    void start();
}

/**
 * 工厂类(Factory):负责创建单个对象
 */
public class CarFactory {
    public static Car createCar(String carType) {
        if (carType.equals("宝马")) {
            return new BMW();
        } else if (carType.equals("兰博基尼")) {
            return new lamborghini();
        } else {
            return null;
        }
    }
}

/**
 * 具体实现(Concrete Product) 创建车辆 
 */
public class BMW implements Car{
    @Override
    public void start() {
        System.out.println("启动宝马");
    }
}


/**
 * 启动车辆
 */
public class Client {
    public static void main(String[] args) {

        Car car = CarFactory.createCar("宝马");
        car.start();


        Car car1 = CarFactory.createCar("兰博基尼");
        car1.start();

    }
}

总结: 简单的说就是把创建对象交给工厂客户端就不需要自己new直接根据某类型直接拿即可
但是这违背了开闭原则

什么是开闭原则?

开闭原则是面向对象设计中的一项基本原则,指对扩展开放,对修改关闭。
它的主要目的是为了保护软件的可扩展性和可维护性,避免在修改软件的过程中对其他部分造成影响。

开闭原则的主要内容有以下几点:
对扩展开放:软件应该具有良好的扩展性,在不修改原有代码的情况下可以扩展新的功能。
对修改关闭:软件应该具有良好的稳定性,在修改原有代码的情况下不会对其他部分造成影响。

开闭原则的优点:
1. 通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性和灵活性.。
2. 已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使变化中的软件系统有一定的稳定性和延续性。

image-1670470107251

开闭原则可以通过以下几种方式来实现:

  1. 将具体实现和抽象接口分离:通过使用抽象接口隔离具体实现,可以让软件在不修改原有代码的情况下扩展新的功能。
  2. 使用多态:通过多态的方式来实现抽象接口和具体实现之间的绑定,可以在运行时动态绑定,实现软件的扩展性。
  3. 使用模板方法:通过模板方法将算法的步骤固定,而具体实现由子类实现,实现软件的扩展性。
    通过开闭原则的实现,
  4. 使用反射:通过客户端传递的对象字节码来创建实例,这样子就不需要进行修改原始工厂代码

    /**
     * 使用反射实现开闭原则
     */
    public static <T> Car createCarOpen(Class<T> tClass) {
        Car car = null;
        try {
            Object instance = Class.forName(tClass.getName()).newInstance();
            if (instance instanceof Car) {
                car = (Car) instance;
            }
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
            throw new RuntimeException(e);
        }
        return car;
    }

简单工厂在源码中的应用

JDk当中Calendar实例的创建

image-1670474294738

你的压力来源于无法自律,只是假装努力,现状跟不上内心欲望,所以你焦虑又恐慌。——杨不易
本文转载于网络 如有侵权请联系删除

相关文章

  • Web.xml配置说明

    大家好,又见面了,我是你们的朋友全栈君。1.web.xml配置详解:<web-app> <!--指定WEB应用的名字--> <display-name>MyWeb</display-name> <!--WEB应用描述信息--> <description>MyWebdemo</description> <!--web的初始化参数,通过ServletContextEvent.getServletContext().getInitParameter("field")获得value的值(ServletContextEvent通过listener获得)--> <context-param> <param-name>contextConfigLocation</para-name> <param-value>classpath:applicationContext.xml</param-value> <descr

  • 【Web技术】1078- 一文搞定 echarts 地图轮播高亮

    ?前言这两天忙着做公司的超级数据大屏,实在挤不出时间连续更文。但是更文活动都坚持这么久了也不想停止更新,那我就分享一下在工作中经常用到的echarts地图轮播高亮吧。技术栈用的是vue2.x相信效果大家已经清楚了那我们就开干吧。?️toDoList[]简单的准备一个地图[]保存实例备用[]设置定时器[]设置鼠标移入移出事件?justdoit?️准备一个地图首先准备一个简简单单的地图,因为我在广州所以就用广东省的地图啦~怎么在echarts使用地图我就不说了看看文档然后把对应的地图json导入就可以了,相信大家也会。对了有人问到我在哪里找地图json文件,我们可以在DataV.GeoAtlas[2]查询我们想要找的城市然后选择Json文件下载就可以啦。 image.png?保存实例备用首先我们要知道想让地图轮播高亮就需要用到eharts自带的dispatchAction[3]API,而这个API是要用eharts实例去使用的,所以在vue中我们要将一开始地图初始化的实例给保存下来。<template> <divref="myChart"id=&quo

  • 2021-04-18:给定一个二维数组matrix,里面的值不是1就是0,

    2021-04-18:给定一个二维数组matrix,里面的值不是1就是0,上、下、左、右相邻的1认为是一片岛,返回matrix中岛的数量。福大大答案2021-04-18:并查集。代码用golang编写。代码如下:packagemain import"fmt" funcmain(){ arr:=[][]byte{ {49,49,49,49,48}, {49,49,48,49,48}, {49,49,48,49,48}, {49,49,48,48,48}, {48,48,48,48,48}} ret:=numIslands(arr) fmt.Println(ret) } funcnumIslands(board[][]byte)int{ row:=len(board) col:=len(board[0]) uf:=NewUnionFind(board) forj:=1;j<col;j++{ ifboard[0][j-1]=='1'&&board[0][j]=='1'{ uf.union(0,j-1,0,j

  • Postgresql installation

    TheWorld'sMostAdvancedOpenSourceRelationalDatabaseubuntudownloadandinstallationsudoapt-getupdate sudoapt-getinstallpostgresql sudoapt-getinstallpostgresql-client #sudoapt-getinstallpostgresql-contrib #sudoapt-getinstallpgadmin3 sudopipinstallpsycopg2-binary复制usermanagement#创建用户 sudoadduserdbuser #切换用户 sudosu-postgres复制databaseoperations#进入数据库 psql #设置密码 \passwordpostgres #创建密码 CREATEUSERdjango_userWITHPASSWORD'hello_django'; #创建数据库 CREATEDATABASEhello_djangoOWNERdjango_user; #用户授权

  • Java ——MongDB 插入数据、 模糊查询、in查询

    由于需要用MongoDB缓存数据,所以自己写了一套公共的存放和读取方法,具体如下:存放mongodb:/** *公共方法:设置Object类型缓存 *@authorshijing *@paramparam *@paramsysGuid */ publicvoidsetObjData(Map<String,Object>param,StringsysGuid,StringenumBpd){ DBObjectdbObject=newBasicDBObject(); dbObject.putAll(param); StringcollectionName=EnumBpd.getBpdType(enumBpd)+sysGuid; mongoDao.insertToCol(dbObject,collectionName); } /** *公共方法:设置List缓存 *@authorshijing *@paramparamList *@paramsysGuid */ publicvoidsetListData(List<Map<String,Object>>

  • MySQL社区版安装图文教程

    MySQL社区版安装图文教程在MySQL官网下载社区版mysql-installer-community,此版本为免费的。(1)选择接受许可条款“Iacceptthelicenseterms”(2)自定义安装,建议选择"Custom”,点击“Next”(3)按照下图选择需要安装的服务,点击“Next”,执行安装(4)安装完成点击下一步(5)进行服务配置,MySQL默认端口为3306(6)为root用户设置密码。可添加一个具有普通用户权限的MySQL用户账户,也可不添加,一般不添加用户,而是用root账户。(7)以系统用户运行windows服务,可以自行设置在Windows下MySQL服务名,而且要牢牢记住此名字。(8)请求服务配置(9)产品配置信息,安装MySQLServer完成。(10)配置环境变量(可以不配置)前面步骤完成后安装好MySQL,为MySQL配置环境变量。MySQL默认安装在C:\ProgramFiles下。1)新建MYSQL_HOME变量,并配置:C:\ProgramFiles\MySQL\MySQLServer5.7MYSQL_HOME:C:\Progra

  • 【支撑20亿人的机器学习】Jeff Dean、贾扬清等ScaledML大会演讲

    精彩回顾2018新智元产业跃迁AI技术峰会圆满结束,点击链接回顾大会盛况:爱奇艺http://www.iqiyi.com/l_19rr3aqz3z.html腾讯新闻http://v.qq.com/live/p/topic/49737/preview.html新浪科技http://video.sina.com.cn/l/p/1722511.html云栖社区https://yq.aliyun.com/webinar/play/419斗鱼直播https://www.douyu.com/432849天池直播间http://t.cn/RnQPhuYIT大咖说http://www.itdks.com/eventlist/detail/1992新智元编译来源:ScaledML作者:文强【新智元导读】如何利用GPU,TPU,CPU等不同计算平台,如何从数据、模型等多个维度扩展机器学习?可扩展是机器学习接下来的攻关重点之一。谷歌大脑负责人JeffDean日前在ScaledML大会发表演讲《系统与机器学习》,介绍TPU最新进展以及谷歌在可扩展机器学习方面的工作。英伟达首席科学家BillDally、Face

  • 沃尔玛进军智能硬件,推出智能座椅造福千万家庭

    正值酷暑,因为家长太粗心,把婴儿遗忘在车内,导致中暑甚至死亡的新闻让人惋惜不已。想必各位读者都不陌生,因为这样的悲剧在中国发生了太多,在国外也是屡见不鲜。这主要还是因为父母带孩子出门,自己下车时太过于专注于自己的事情,心思根本没在孩子身上,导致了悲剧发生。最近,沃尔玛找到了解决之道,沃尔玛近日公布一款新的智能硬件产品:智能汽车座椅,将会在自家店内独家发售。这款智能座椅出自婴童用品全球领导品牌Evenflo的手笔,利用传感器技术,提醒家长汽车后座上还有自家小孩,下车时别忘了。Evenflo智能婴儿安全座椅有两个作用:当汽车一熄火,小孩胸前的夹扣就会触发声音警报,提醒家长后座有小孩,解开夹扣警报才会停止。当汽车启动后,如果夹扣没有扣好,夹扣也会发出声音提醒。Evenflo智能婴儿安全座椅使用时不需要蓝牙、不需要网络、也不需要手机,只需要用到OBD接口。用户除了要安装好安全座椅外,还需要将随盒附带的无线接收器插在OBD接口。4S店技工用专用的电脑检测仪对汽车进行检测时所接入的插口,就是OBD接口,它的位置一般都在方向盘下方的内饰板中,靠静驾驶员膝盖附近的地方,不同车型的位置稍有区别,但基本位

  • C语言程序设计50例(三)(经典收藏)

    【程序31】 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续    判断第二个字母。 1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。 2.程序源代码:1#include"stdio.h" 2#include"conio.h" 3voidmain() 4{ 5charletter; 6printf("pleaseinputthefirstletterofsomeday\n"); 7while((letter=getch())!='Y')/*当所按字母为Y时才结束*/ 8{ 9switch(letter) 10{ 11case'S':printf("pleaseinputsecondletter\n"); 12if((letter=getch())=='a') 13printf("saturday\n"); 14elseif((letter=getch()

  • 【揭秘】手机支付病毒的真实面孔

    随着移动支付的不断普及,手机支付病毒开始逐渐蔓延。手机病毒是如何在不经意之间道歉我们的钱财呢?本期大讲堂将联合腾讯手机管家首发2014年手机支付安全报告,揭开手机病毒的真实面纱.手机支付类病毒攻击的形式和特征腾讯移动安全实验室针对目前已发现的82805个手机支付类病毒的特征进行归类统计发现,支付类病毒最大特征是表现为静默联网、删除短信、发送短信、读短信、开机自启动。其中,静默联网比例高达61.09%、位居第一,静默删除短信、静默发送短信、开机自启动、读短信的病毒行为分别占比37.3%与36.51%、30.1%、19.74%。分别位居第二和第三、第四、第五。另外,静默安装、静默卸载、监听键盘输入、静默获取root权限分别占比为5.62%、4.77%、4.52%、3.34%。这四个病毒行为可在用户不知情的情况下,可卸载掉手机端重要软件(安全软件),安装病毒子包或者监听用户键盘输入的动作或内容、获取root权限、窃取用户账号密码等隐私,可对用户造成极大危害。目前,支付类病毒感染用户总数已达到1126.75万。腾讯移动安全实验室通过对支付类病毒进行从特征共性再进行总结分类,主要分为以下几种类型

  • 从头学前端-CSS基础04

    定位为什么需要定位 >定位可以让盒子在指定盒子内自由移动位置,并压住其他盒子,而浮动只能让盒子排在一行;定位的组成 >定位是定位模式+边偏移 >定位模式用于指定一个元素在文档中的定位方式,使用CSS属性position;值包括static、relative,absolute,fixed>边偏移决定了改元素的最终位置;CSS中有topleftrightbottom四个属性;配合定位属性position使用复制-静态定位static复制 >是元素的默认定位方式,按照标准流特性摆放位置,没有偏移复制-相对定位relative 复制 >元素在移动时会以自己原来的位置移动;原来在标准流中的位置还保留,后面的盒子以标准流对待它(不脱标)复制-绝对定位absolute复制 >绝对定位是元素在移动位置的时候,是相对于它祖先元素移动; >如果没有祖先元素或祖先元素没有定位,则以浏览器为准对齐 >如果祖先元素有定位,则以最近一级有定位的祖先元素为准移动位置; >觉得定位不占用原来标准流的位置,即脱标复制-**子绝父相**: 复制 >

  • 你好,C++(35)类是如何藏私房钱的?6.2.4 拷贝构造函数

    6.2.6 类成员的访问控制 类成员包括类的成员变量和成员函数,它们分别用来描述类的属性和行为。而类成员的访问控制决定了哪些成员是公开的,可以被外界访问,也可以被自身访问;哪些成员是私有的,只能在类的内部访问,外界无法访问。就像一个人的钱包,只有他自己能动,别人是不能动的。又如同自己藏的私房钱也只有自己知道,对其他人而言,私房钱是完全隐藏的。 大家可能会问,为什么要对类成员的访问加以控制,大公无私地谁都可以访问不是挺好的吗?这是因为在现实世界中,人们对事物的访问是受到控制的,我们可以访问到某些事物,但不可能访问到任何事物。就如同我们只能知道自己钱包里有多少钱,而无法知道别人钱包里有多少钱一样。这一点反映到C++中,就成了类成员的访问控制。可以设想这样的情形:钱包里的钱只能由自己访问,别人是无权访问的。当它成为“人”这个类的一个属性,用某个成员变量来表示后,其访问自然也应该受到控制,只能由“人”这个类自身的行为(成员函数)来访问,对于外界其他函数而言,这个成员变量就被隐藏起来是不可见的,自然也就无法访问。如果不对访问加以控制,谁都可以访问,那就很有可能其他函数(小偷)会错误地修

  • Android Studio精彩案例(五)《JSMS短信验证码功能实现》

    转载本专栏文章,请注明出处,尊重原创。文章博客地址:道龙的博客很多应用刚打开的时候,让我们输入手机号,通过短信验证码来登录该应用。那么,这个场景是怎么实现的呢?其实是很多开放平台提供了短信验证功能的接口供我们使用,我们只需要关心客户端,无需关心服务端的业务逻辑,而且更加稳定安全。今天这篇文章就通过Jpush官方的JSMS模块,来实现短信验证登录功能。虽然,Jpush对于极光推送是非常有名出色的,短信验证也是它官网的新内容,不过,多种开放平台使用方式大同小异,而且综合对比,Jpush官网的短信验证使用起来很简单!既然人家给了接口,就来感受一下它的短信验证的实现吧。首先咱们了解一下短信验证的请求流程:1.以用户提供的手机号码作为参数,请求连接到JSMS的服务器2.JSMS服务器校验号码格式成功,请求短信服务商发送短信验证码到该手机号3.手机终端接收到验证码,用户输入验证码4.验证码传入应用后台服务端,服务端通过JSMS接口验证,再把验证结果传回手机端JPush官方地址:http://docs.jiguang.cn/jsms/resources/进入官网,JSMS模块,官网是这么给出的短信验

  • 版权保护不被破解--加壳-内存中运行解密逻辑

    加壳的全称应该是可执行程序资源压缩,是保护文件的常用手段.加壳过的程序可以直接运行,但是不能查看源代码.要经过脱壳才可以查看源代码.加“壳”其实是利用特殊的算法,对EXE、DLL文件里的资源进行压缩。类似WINZIP的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。解压原理,是加壳工具在文件头里加了一段指令,告诉CPU,怎么才能解压自己。加“壳”虽然增加了CPU附带但是减少了硬盘读写时间,实际应用时加“壳”以后程序运行速度更快(当然有的加“壳”以后会变慢,那是选择的加“壳”工具问题)。一般软件都加“壳”这样不但可以保护自己的软件不被破解、修改还可以增加运行时启动速度。加“壳”不等于木马,我们平时的巨大多数软件都加了自己的专用“壳”。     RAR和ZIP都是压缩软件不是加“壳”工具,他们解压时是需要进行磁盘读写,“壳”的解压缩是直接在内存中进行的,用RAR或者ZIP压缩一个病毒你试试解压缩时杀毒软件肯定会发现,而用加“壳”手段封装木马,能发现的杀毒软件就剩不下几个。参考链接:[1]https://zhi

  • python并发_进程_multiprocessing

    多进程基础,主要是用了multiprocessing模块: 在一个python进程中开启子进程,start方法和并发效果。 importtime frommultiprocessingimportProcess deff(name): print('hello',name) print('我是子进程') if__name__=='__main__': p=Process(target=f,args=('bob',)) p.start() time.sleep(1) print('执行主进程的内容了')复制   多进程与PID #多个进程可以同时执行并发 #我们现在写的一个py文件就自己一个进程同步执行代码 #并发效果: #在我们自己的一个py文件里启动多个进程 #多个进程之间-操作系统 #如何在自己的py文件里启动一个进程 importos importtime frommultiprocessingimportProcess deffunc(args): print(args) time.sleep(1) print('子进程',os.getpid()) p

  • 【转载】4412开发板制作智能小车入门篇系列人工智能

    如果你也是个软件开发者,也希望自己多少能懂一点硬件知识,软硬兼修的话,可以来制作一个智能小车。期间会遇到很多硬件相关的术语或者专有名词,优秀的你,肯定会不懂就查不懂就学的,这是最重要的过程。               智能小车作为智能机器人的雏形,它通过内外传感器感知外部环境信息和自身状态,完成相应动作。是一个在复杂环境中实现自主作业的自动控制系统,属于陆地自主行驶车辆的一种。它涉及到开发板、传感器、信息融合、通信接口、导航控制、人工智能以及自动控制等一系列高新技术。设计以迅为ARM开发板为核心,可以实现自动避障、远程蓝牙操控等功能,以应对可能出现的复杂环境。另外本设计在开发时就预留了其他功能接口,可以方便的实现改装升级,例如加入视频监控模块、寻迹模块等,都很方便。        系统总体设计   系统的功能主要依靠四个模块来完成,分别为蓝牙通讯模块,液晶显示模块,直流减速电机驱动模块,自动避障模块。设计以Android手机为控制平台,通过蓝牙接收模块与手机端蓝牙连

  • 数据中心SDN网络、VXLAN、虚拟化之间的关系和概念

    参考2个专业的资源: http://www.h3c.com/cn/d_201811/1131076_30005_0.htm https://support.huawei.com/enterprise/zh/doc/EDOC1100087027 传统VLAN网络 VLAN概念 VLAN(VirtualLocalAreaNetwork)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。每个VLAN是一个广播域,VLAN内的主机间通信就和在一个LAN内一样,而VLAN间则不能直接互通,这样,广播报文就被限制在一个VLAN内。 如图,两台交换机放置在不同的地点,比如写字楼的不同楼层,每台交换机连接两台属于不同企业用户的计算机,此时就可以将两台计算机划分到不同的VLAN,实现对不同企业用户的隔离。 VLAN报文 IEEE802.1Q协议规定,在以太网数据帧的目的MAC地址和源MAC地址字段之后、协议类型字段之前加入4个字节的VLAN标签(又称VLANTag,简称Tag),用以标识VLAN信息。其中,数据帧中的VID(VLANID)字段标识了该数据帧所属的VLAN,共12bi

  • 5312: 冒险 线段树 复杂度分析

    国际惯例的题面:一看到这种维护序列的题,数据范围分块过不去,显然线段树了。考虑位运算的性质,and相当于钦定一些位必须是0,or相当于钦定一些位必须是1,这都是一些区间赋值操作。然而我们不可以按位确定,为什么?因为当你确定了最高位之后,你需要在满足高位的情况下求出低位,这相当于是一个取子集操作,单层的树是不可做的。(树套树20层?恭喜你不如n^2暴力了)于是去ORZ了英文题解,发现他是这样分析的:我们对每一个位上的操作把数分成两类,有影响的和无影响的。因为操作对这两种数不同,所以我们不能直接维护。但是,显然在一个操作之后,两种不同的数会被变得相同!于是,当我们操作到某一个区间,如果这个操作对区间内的所有数并不是全部相同,那么我们递归下去做(也就是访问多余节点)。因为操作后两边这些位的数会变得相同,而变相同的次数有限,所以复杂度是正确的。(表示原文一堆势能分析不明觉厉)然后就是怎么判断操作对某个区间是否相同的问题了。我们维护区间的and和和or和,显然两者的xor和就是这个区间存在不同的位。如果这些存在不同的位与本次操作会被钦定的位and起来不为0的话,就说明这次操作对这个区间的所有数并

  • 《linux就该这么学》课堂笔记19 iSCSI、MariaDB、无人值守安装

    1、iSCSI技术介绍   硬盘是计算机硬件设备中重要的组成部分之一,硬盘存储设备读写速度的快慢也会对服务器的整体性能造成影响。   为了进一步提升硬盘存储设备的读写速度和性能,人们一直在努力改进物理硬盘设备的接口协议。当前的硬盘接口类型主要有IDE、SCSI和SATA这3种。 IDE是一种成熟稳定、价格便宜的并行传输接口。 SATA是一种传输速度更快、数据校验更完整的串行传输接口。 SCSI是一种用于计算机和硬盘、光驱等设备之间系统级接口的通用标准,具有系统资源占用率低、转速高、传输速度快等优点。 2、MariaDB数据库   2.1)增(insert)、删(delete)、改(update)、查(select)所有sql语句后都必须“;”号结束 mysql-uroot-p  // 使用(登录)mysql SETpassword=PASSWORD('密码');  // 修改root密码 CREATEUSER用户名@主机名IDENTIFIEDBY'密码';  // 创建数据库管理账户 usemysql;  // 使用(操作)mysql数据库 CREATETABLEuser(nam

  • 2017-2018-1 20155306 实验五 通信协议设计

    2017-2018-12015530620155315实验五通信协议设计 实验内容: 通讯协议设计-1 在Ubuntu中完成http://www.cnblogs.com/rocedu/p/5087623.html中的作业: 1.两人一组 基于Socket实现TCP通信,一人实现服务器,一人实现客户端 2.研究OpenSSL算法,测试对称算法中的AES,非对称算法中的RSA,Hash算法中的MD5 3.选用合适的算法,基于混合密码系统实现对TCP通信进行机密性、完整性保护。 4.学有余力者,对系统进行安全性分析和改进。 提交运行结果截图 复制 通讯协议设计-2 在Ubuntu中实现对实验二中的“wc服务器”通过混合密码系统进行防护 提交测试截图 复制 实验步骤: 任务一: 1.下载OpenSSL1.1.0alpha 2.解压源代码: tarxzvfopenssl-1.1.0-pre1.tar.gz 复制 3.然后进入源代码目录: cdopenssl-1.1.0-pre1 复制 4.编译安装: ./configure make sudomakeinstall 复制 5.测试代码te

  • CS144lab笔记

    CS144lab笔记 此笔记为本人学习CS144课程实验的笔记 由于时间比较仓促,过年家里事情也比较多,所以展示先只附上代码,后期我会抽时间进行完善,争取打造成一个通俗易懂的笔记 实验代码参考了了下面几位博主的笔记 知乎-热心小冯 康宇 peilei 课程主页,相关课程资料都在这里了,我就不再专门弄了,还是官方的更靠谱一些 下面看代码: lab0 webget.cc 点击查看代码 webget.cc 复制 byte_stream.hh 点击查看代码 //ccm #ifndefSPONGE_LIBSPONGE_BYTE_STREAM_HH #defineSPONGE_LIBSPONGE_BYTE_STREAM_HH #include<deque> #include<string> //!\briefAnin-orderbytestream. //!Bytesarewrittenonthe"input"sideandreadfromthe"output" //!side.Thebytestreamisfinite:thewriterca

相关推荐

推荐阅读