简单接口实现规范
rest接口规范文档

rest接口规范文档REST接口规范文档。
1. 概述。
REST(Representational State Transfer)是一种软件架构风格,它是一种轻量级、简单、快速的Web服务架构。
RESTful接口是基于HTTP协议的一种API设计风格,它使用标准的HTTP方法(GET、POST、PUT、DELETE)来实现对资源的操作。
本文档旨在规范RESTful接口的设计和实现。
2. 接口命名规范。
2.1 URL命名规范。
RESTful接口的URL应该使用名词来表示资源,而不是动词。
URL中的名词应该使用复数形式,以表示资源的集合。
例如,获取用户列表的接口应该使用"/users"而不是"/user/list"。
2.2 HTTP方法规范。
RESTful接口应该使用标准的HTTP方法来对资源进行操作。
具体规范如下:GET,用于获取资源。
POST,用于创建新资源。
PUT,用于更新已有资源。
DELETE,用于删除资源。
3. 请求和响应规范。
3.1 请求参数规范。
RESTful接口的请求参数应该使用标准的HTTP参数传递方式。
对于GET方法,参数应该以查询字符串的形式传递;对于POST和PUT方法,参数应该以表单参数或者JSON格式传递。
3.2 响应格式规范。
RESTful接口的响应格式应该使用标准的HTTP状态码和JSON格式。
对于成功的响应,应该返回200状态码和JSON格式的数据;对于错误的响应,应该返回相应的错误状态码和错误信息。
4. 错误处理规范。
4.1 错误状态码规范。
RESTful接口的错误状态码应该使用标准的HTTP状态码。
常见的错误状态码包括:400 Bad Request,请求参数错误。
401 Unauthorized,未授权的访问。
404 Not Found,资源不存在。
500 Internal Server Error,服务器内部错误。
4.2 错误信息规范。
应用程序接口规范

应用程序接口规范1. 简介本文档详细描述了应用程序接口(API)的规范,包括接口的定义、功能、使用方法和技术要求。
开发者应遵循本文档的规范来设计和实现API,以确保系统的兼容性、稳定性和可维护性。
2. API定义与分类2.1 API定义应用程序接口(API)是一套定义良好的协议,它允许不同的软件系统相互通信。
API定义了请求的结构、响应的格式和错误处理机制等,为开发者提供了一种简便的方式来访问系统功能。
2.2 API分类根据不同的功能和用途,API可分为以下几类:- 公共API:提供给外部开发者使用的接口,用于访问系统的公共功能。
- 内部API:供内部团队使用的接口,用于实现系统内部功能和模块之间的通信。
- 管理API:用于管理系统资源、用户权限和系统配置等。
3. API使用方法3.1 接口请求- 请求参数:根据API的具体需求,可以在请求中传递JSON 格式的参数。
- 请求头部:包含API密钥、认证信息等必要头部信息。
3.2 接口响应- 响应格式:返回JSON格式的数据,包含接口调用结果、状态码和错误信息(如有)。
- 错误信息:当发生错误或异常时,返回详细的错误信息,包括错误码、错误描述和解决方案。
4. API技术要求4.1 性能要求- 响应时间:API调用应在500ms内完成,如有特殊需求,可在接口说明中注明。
- 并发能力:支持高并发访问,确保系统稳定性和可靠性。
4.2 安全要求- 认证授权:对访问API的用户进行认证和授权,确保接口安全。
- 访问控制:限制API的访问频率和来源,防止恶意攻击和滥用。
4.3 兼容性要求- 接口版本管理:支持多版本共存,通过版本号区分。
- 数据格式:统一使用JSON格式,确保跨平台和语言的兼容性。
5. 接口示例以下是一个简单的接口示例:请求URL:GET /api/users请求参数:无响应示例:{"status": 200,"data": [{"id": 1,"name": "张三",},{"id": 2,"name": "李四",}],"message": "查询成功"}6. 附录- API列表:列出所有API接口的详细信息,包括接口名称、描述、请求URL、请求参数、响应格式等。
java接口规范

java接口规范Java接口规范是指在Java中编写接口时应遵循的一些约定和规范。
接口是一种抽象的概念,用于定义一组相关的操作或功能,并且可以被多个类实现。
接口规范的目的是提供一种清晰、一致的方式来定义接口,以便于其他开发人员理解和使用。
以下是一些Java接口规范的内容:1. 接口命名:接口的名称应该清晰明了,能够准确表达接口的功能或角色。
接口的名称应该使用驼峰命名法,并且以大写字母开头。
2. 接口声明:接口应该使用关键字“interface”来声明,并且应该放置在单独的源文件中。
接口的声明应该包含一个或多个抽象方法的定义。
3. 方法命名:接口中的方法应该使用清晰明了的动词命名,以准确表达方法的功能。
方法的命名应该使用驼峰命名法,并且以小写字母开头。
4. 方法声明:接口中的方法声明应该包含方法的返回类型、方法名和参数列表。
接口中的方法默认是抽象方法,不需要使用关键字“abstract”来声明。
接口中的方法不能包含方法体。
5. 常量声明:接口中可以声明常量,这些常量需要使用关键字“final”和“static”来声明,并且常量的名称需要使用大写字母和下划线。
接口中的常量默认是public的,并且不需要使用关键字“public”来声明。
6. 接口实现:类可以实现一个或多个接口,通过实现接口可以强制类实现接口中定义的方法。
类实现接口时需要使用关键字“implements”来声明,并且需要实现接口中定义的所有抽象方法。
7. 接口继承:接口可以继承一个或多个接口,通过继承接口可以扩展接口的功能。
接口继承接口时需要使用关键字“extends”来声明,并且需要继承所有父接口的定义。
8. 接口的默认方法:从Java 8开始,接口可以包含默认方法。
默认方法是一种有方法体的接口方法,可以在实现类中直接调用。
默认方法需要使用关键字“default”来声明。
9. 接口的静态方法:从Java 8开始,接口可以包含静态方法。
api接口的简单编写方式

api接口的简单编写方式API接口是指不同的软件系统之间,通过API接口进行数据的交互和通信的一种方式。
在信息化时代,API接口已经成为了各个领域的软件开发不可或缺的一部分,其开发难度和繁琐的问题也逐渐受到了广大程序员的重视和关注。
下面,我将为大家介绍一下API接口的简单编写方式,希望对软件开发爱好者在开发API接口时有所启发和帮助。
1、确定请求方法第一步要确定API接口的请求方法,通常有GET、POST、PUT、DELETE等几种请求方法。
在不同的业务场景下,应选择适合的请求方法,避免使用不合理的请求方法带来不必要的麻烦。
例如:GET方法用于获取资源,POST方法用于提交数据,PUT方法用于修改资源,DELETE方法用于删除资源等等。
2、确定API接口的请求URL第二步要确定API接口的请求URL,包括主机地址、端口号、路径、查询参数等等。
在确定URL时,应考虑到API的可读性和易用性,同时也应保证API接口的安全性和准确性,以避免恶意攻击和误操作。
3、确定API接口的参数第三步要确定API接口的参数,包括请求头参数、请求体参数、路径参数、查询参数等等。
在确定参数时,应考虑到API的易用性和完整性,同时也应保证API接口的安全性和正确性,以避免恶意攻击和数据丢失。
4、编写API接口的具体实现第四步要编写API接口的具体实现,包括请求方法的处理、参数的解析、数据的查询和处理等等。
在编写API接口时,应遵循统一的编码规范和开发规范,保证代码的质量和可读性,同时也应考虑到API 接口的性能和可扩展性。
5、测试API接口的正确性和可用性最后一步是测试API接口的正确性和可用性,包括对API接口的各种场景和请求方式进行测试,并对测试结果进行评估和反馈。
在测试API接口时,应遵循严格的测试流程和测试标准,保证API接口的质量和可信度,同时也应考虑到API接口的安全性和稳定性,以及对业务应用的影响和风险。
总之,API接口的简单编写方式包括确定请求方法、确定请求URL、确定请求参数、编写具体实现和测试正确性和可用性等几个步骤。
硬件网络接口规范

硬件⽹络接⼝规范⼀、RJ45接⼝规范:1.基本物理接⼝:a) RJ45接⼝作为最基本的⽹络接⼝之⼀有两种形式,对于千兆⽹⼝有4条线,两对差分线;对于千兆⽹⼝有4对差分线,RJ45⽔晶头是有8个凹槽和8个触点(8p8c)的接头,RJ45接⼝分为集成⽹络变压器和⾮集成⽹络变压器两种,具体参见下⼀⼩节;b) RJ11⽔晶头⼀般都是4芯的,常⽤来连接电话和调制解调器。
需要注意的是,RJ11通常指的是6个位置(6针)模块化的插孔或插头,但是只有4针被⽤到,RJ11通常只有6个凹槽和4个触点(6p4c)的接头;RJ45 4对差分线 RJ11 2对差分线c) RJ45⽔晶头接线时有两种线序标准:T-568A和T-568B。
通过采⽤不同的标准,最后制作成的⽹线有直通型和交叉型两种。
现在所有的⽹线制作都采⽤的是568B,线序如下(橙⽩橙绿⽩蓝蓝⽩绿棕⽩棕):2.⽹络变压器与RJ45接⼝a) 在以太⽹设备中,通过PHY芯⽚(物理层的⽹络转换芯⽚)接RJ45时,中间都会加⼀个⽹络变压器。
有的变压器中⼼抽头接到地。
⽽且接电源时,电源值⼜可以不⼀样,3.3V,2.5V,1.8V都有。
这个变压器的作⽤分析如下:中间抽头为什么有些接电源?有些接地?这个主要是与使⽤的PHY芯⽚UTP⼝驱动类型决定的,这种驱动类型有两种,电压驱动和电流驱动。
电压驱动的就要接电源;电流驱动的就直接接个电容到地即可!所以对于不同的芯⽚,中⼼抽头的接法,与PHY是有密切关系的,具体还要参看芯⽚的datasheet和参考设计了。
为什么接电源时,⼜接不同的电压呢?这个也是所使⽤的PHY芯⽚资料⾥规定的UTP端⼝电平决定的。
决定的什么电平,就得接相应的电压了。
即如果是2.5v的就上拉到2.5v,如果是3.3v的就上拉到3.3v,因此⽹络变压器具有适配不同电压的功能。
这个变压器到底是什么作⽤呢,可不可以不接呢。
从理论上来说,是可以不需要接变压器,直接接到RJ45上,也是能正常⼯作的。
接口设计规范范文

接口设计规范范文1.接口一致性:接口应该尽可能地统一命名,使用相同的参数命名和返回值类型,以减少不必要的学习成本和开发难度。
2.接口简洁性:接口应该尽可能地简单明了,只包含必要的方法和参数。
过于复杂的接口不仅会增加理解和使用的难度,还会降低系统的性能。
3.接口的单一职责原则:接口应该只负责一个特定的功能,不同功能的接口应该分开设计,遵循“高内聚、低耦合”的设计原则。
4.接口的可扩展性:接口应该预留足够的扩展空间,允许新增功能的加入而不影响已有的功能。
可以通过使用抽象类或接口来定义公共方法和属性,以方便后续的扩展。
5.接口的可维护性:接口应该明确规定每个方法的输入、输出以及可能的异常情况,提供足够的文档和注释。
这样可以降低发生错误的几率,减少维护成本。
6.接口的可重用性:接口应该尽可能地通用化,避免与具体的实现细节耦合在一起。
这样可以提高接口的重用率,减少代码的重复编写。
7.接口的安全性:接口应该进行必要的身份验证和授权,以防止非法访问和操作。
可以使用认证和授权机制,如OAuth等。
8.接口的性能优化:接口应该设计成高性能的,尽量减少不必要的数据传输和计算,避免使用过于复杂的数据结构。
9.接口的版本管理:当接口需要进行修改时,应该通过版本管理的方式来兼容旧版本的接口。
可以通过在接口名称中添加版本号或者使用适配器模式来实现。
总结来说,一个好的接口设计规范应该具有一致性、简洁性、单一职责原则、可扩展性、可维护性、可重用性、安全性和性能优化。
通过遵循这些规范,可以提高系统的质量和开发效率,减少后续的维护成本。
API接口规范

API接⼝规范1. api接⼝应⽤程序编程接⼝(Application Programming Interface,API接⼝),就是应⽤程序对外提供了⼀个操作数据的⼊⼝,这个⼊⼝可以是⼀个函数或类⽅法,也可以是⼀个url地址或者⼀个⽹络地址。
当客户端调⽤这个⼊⼝,应⽤程序则会执⾏对应代码操作,给客户端完成相对应的功能。
当然,api接⼝在⼯作中是⽐较常见的开发内容,有时候,我们会调⽤其他⼈编写的api接⼝,有时候,我们也需要提供api接⼝给其他⼈操作。
由此就会带来⼀个问题,api接⼝往往都是⼀个函数、类⽅法、或者url或其他⽹络地址,不管是哪⼀种,当api接⼝编写过程中,我们都要考虑⼀个问题就是这个接⼝应该怎么编写?接⼝怎么写的更加容易维护和清晰,这就需要⼤家在调⽤或者编写api接⼝的时候要有⼀个明确的编写规范为了在团队内部形成共识、防⽌个⼈习惯差异引起的混乱,我们都需要找到⼀种⼤家都觉得很好的接⼝实现规范,⽽且这种规范能够让后端写的接⼝,⽤途⼀⽬了然,减少客户端和服务端双⽅之间的合作成本。
⽬前市⾯上⼤部分公司开发⼈员使⽤的接⼝实现规范主要有:restful、RPC。
RPC( Remote Procedure Call ): 翻译成中⽂:远程过程调⽤[远程服务调⽤]. 从字⾯上理解就是访问/调⽤远程服务端提供的api接⼝。
这种接⼝⼀般以服务或者过程式代码提供。
服务端提供⼀个唯⼀的访问⼊⼝地址:或客户端请求服务端的时候,所有的操作都理解为动作,⼀般web开发时,对应的就是HTTP请求的post请求通过请求体参数,指定要调⽤的接⼝名称和接⼝所需的参数action=get_all_student&class=301&sex=1m=get_all_student&sex=1&age=22command=100&sex=1&age=22接⼝多了,对应函数名和参数就多了,前端在请求api接⼝时难找.容易出现重复的接⼝restful: 翻译成中⽂: 资源状态转换.(表征性状态转移)把服务端提供的所有的数据/⽂件都看成资源,那么通过api接⼝请求数据的操作,本质上来说就是对资源的操作了.因此,restful中要求,我们把当前接⼝对外提供哪种资源进⾏操作,就把资源的名称写在url地址。
接口设计规范

接口设计规范## 一、概述接口设计规范一般用作产品、技术和运营团队的指引,以满足业务需求并实现稳定可靠的接口访问。
它旨在提高开发团队的效率,并帮助团队避免经常出现的技术和产品问题。
## 二、接口设计原则1. 易用性:易于接口的输入参数配置、示例化和文档说明,用户能够很容易理解接口参数以及背后的业务逻辑。
2. 高可用性:使用默认配置合理的容错处理,能够有效防止数据量过大或者访问过多引起的调用失败的情况。
3. 架构优化:支持多种业务语言、接口框架,合理使用图像、视频压缩与加载,优化接口运行时间、流量和安全性等。
4. 平台支持:支持多种终端、操作系统版本,Smartphone、Pad、PC等,同时考虑操作使用性和用户体验。
## 三、接口设计流程1. 收集需求:记录接口访问调用和授权用户需求,包括接口执行入参、业务参数等,以满足不同场景下的业务需求。
2. 运行环境:定义接口的接入环境,包括开发语言、服务器环境、数据存储等,确保接口运行环境的稳定性。
3. 界面设计:将收集的需求与UI中交互和逻辑相结合,确定应用程序功能,以期待用户开发体验。
4. 数据定义:将接口访问数据和接口输出数据归纳在一个数据字典中,包括字段名称、字段类型、是否必填等信息。
5. 接口验证:编写对应的测试脚本,进行白盒测试验证接口的正确性,包括功能性测试、安全性测试等,确保接口的质量。
## 四、接口参数约定1. 命名规范:数据参数使用驼峰命名法,API接口使用习惯性英文缩写;2. 统一参数:使用全局数据参数,统一注册用户、登录认证凭证等;3. 必填参数:每个API至少有一个必填参数,以标识该调用功能,必填参数不允许为null或空字符。
4. 返回值:调用接口结果应以一个Json格式结构或XML格式结构为准,返回数据格式和内容要尽可能简单,易于理解和解释。
## 五、接口文档标准1. 文档内容:文档应包含API参数介绍、API请求示例、测试环境说明等,请求和返回示例必须以Json或其他标准数据格式给出,以便用户能够更好的理解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简单接口实现规范作者:Softit增补:小小企鹅,StoneLee最新更新:2003-5-27预备知识:●C++的基础概念,特别是虚函数和多态●COM,建议参考书籍《COM 本质论》(ISBN:7-5083-0611-2)第一章整体概念第一节概要说明基于组件的软件设计方法是软件工业实践的一个基本成功经验,在软件设计过程中要考虑模块的少耦合少依赖,这是模块重用的基础。
C++虚函数为接口提供了理论基础。
之所以称之为“简单接口”,是相对于COM和CORBA组件而言,大部分小组件不需要支持引用计数、多语言开发、跨网络运行等特性。
运用简单接口还可以很容易写出模块化的插件,例如,可以将棋牌类客户端做成插件形式,但外观可以使用公用的界面框架,也可以嵌入到游戏大厅里。
简单接口实现的组件将来改造成ActiveX组件也很容易。
第二节名词解释一、图示二、说明1、接口一组纯虚函数的集合。
实现时,是个头文件,里面全部是纯虚函数,从C++观点讲,就是一个函数指针表(vfnTable),详细可参考COM有关书籍。
例如,上图中的IFoo部分。
2、服务实现接口的组件,供客户应用程序调用,我们称此组件提供了一个支持接口的服务,或简单理解成Server也可以。
服务一般以DLL或lib库和接口的头文件一起提供。
(当然:最好还应该有一个说明文档)。
例如,上图中的CFoo部分。
3、客户使用接口的程序,一般是调用接口的具体应用程序,也可理解为Client。
一般客户都是独立成为一个应用程序。
如上图所示,为CExtern部分。
4、回调接口有的时候,客户通过接口调用服务的相关方法后,需要知道这些方法是否执行成功。
但是存在下面两种可能:1)由于服务可能是异步模式,所以客户并不能马上通过方法的返回值获得。
2)或则,为了程序的结构清晰,服务并不想通过接口的调用的返回值,而是希望通过调用客户的一些固定的函数来通知客户事件发生。
这时,就需要用到回调接口。
和接口不同,回调接口实际是服务发起的,由客户实现的。
而接口却是有客户发起的,由服务实现的。
接口的使用,是为了把定义与实现分离,这样能提高程序各模块之间的独立性。
类似于COM组件的连接点。
“服务”有些事件要通知“客户”,通过回掉接口实现。
回调接口也是用头文件实现,里面是纯虚函数。
客户必须继承和实现这个回调接口。
然后将实现回调接口的对象的指针传给服务(一般在服务创建函数中),这样服务就可以在一些约定好的事件中回调客户的程序代码。
如上图所示,CFoo通过回调接口(IFooSink)调用外部模块CExtern的函数,CExtern 实现IFooSink。
CExtern实例化后,将实例后的指针传给CFoo。
一般定义为以Sink为结束的接口,如IFooSink,表明此接口是供IFoo回调的。
旁注:Sink的英文意思是“接收器”。
5、多接口和多回调接口I、多接口任何一个客户,都可能用到多个服务。
比如:我们有一个自动下载的客户程序,CAutoDownLoad,它要使用以下接口为其服务,包括通信接口ICommunicate、资源接口IResMgr。
这样,我们在CAutoDownLoad里,只有获得ICommunicate和IResMgr两个指针,就可以通过其实例(即服务对象)实现相关的接口功能。
II、多回调接口同时,一个客户,也可能实现多个回调接口。
比如:一个游戏服务器CGameServer,被多个回调接口触发,比如:通信回调接口ICmmSink,数据库完成通知IDBSink。
这时,CGameServer只要简单地继承这几个回调接口,如下:Class CGameServer:public ICmmSink,IDBSink {}然后,CGameServer将自己的实例化后的指针,分别传给对应的通信和数据库服务,让他们回调自己。
第三节模块之间通信方式比较:基于接口和基于类共享的方法的比较简单接口间当一个模块IFoo需要回调其它模块(IExtern)的函数时,在IExtern模块中实现回调接口(IFooSink,IExtern继承接口IFooSink即可),将IFooSink传送给IFoo,这种方式是两个接口间交流的方式,约束简明。
接口方式调用的另一个极重要的好处是多态性,即一个接口可以有多种不同的实现方法,如一个CArchieve所包含的月报表数据,通过显示接口IView,可以对应三种不同的显示实现方式(柱状、饼状、数字),而且用户可以在运行时刻动态选择其中的一种或几种显示方式。
相反,如果要调用C++类CFoo的一个方法,需包含CFoo的头定义,头文件中可能有大量私有的,与类之间通讯无关的东西,如CFoo可能包含了很多其它头文件、很多自定义宏等。
CFoo不知有哪些个方法被别人调用、有哪些public属性被引用,因此不能轻易修改自已函数,则将两个类的实现绑定在一起,因无法知道一个类调用了另一个类的哪些方法和引用了哪一些public成员,因而类的定义不能轻易修改,否则可能会影响很多模块。
第二章接口的具体实现第一节接口定义样板文件:IFoo.hclass IFoo{virtual void Release() = NULL; // 释放对象,见下面的说明“接口对象的销毁”virtual BOOL Add(LPCSTR szName, DWORD dwReserved=0) = NULL;virtual BOOL Delete(LPCSTR szName) = NULL;}接口是一经发布尽可能少修改,所以一些将来可能会修改或一些重要的虚函数定义时要加一个dwReserved参数,便于将来扩充第二节接口对象的创建:即服务的实例化一、方法接口对象的创建即new一个实现此接口的对象,将此对象的接口指针返回即可。
创建将来可能更改接口实现时,需要支持版本控制,如互联网应用程序一般要求后期发布的程序与早期发布的模块接口兼容。
二、范例一般我们将接口实现放在一个DLL中,然后,通过DLL的输出函数来实例化接口对象。
如下面所示意:1、DLL实例化一般写在IFoo.cpp中extern "C" __cdecl__declspec(dllexport) BOOL CreateFooObject(/*out*/IFoo** ppFoo){if(ppFoo == NULL) // 先判断传入指针是否为空,是编码的好习惯return FALSE;CFoo *pFoo = new CFoo(); //这里实例化服务CFooif(pFoo == NULL) // 好习惯return FALSE;// 注意:通过类型转换,将CFoo转为IFoo返回给客户*ppFoo = static_cast<IFoo*>(pFoo);return TRUE;}2、服务的实现:Server.dspI、Foo.hclass CFoo: public IFoo {private:CNameList m_listName; // 假设CNameList类是一个动态数组,// 支持Insert、RemoveCurrent、Top、GetCurrent、Next等方法public:virtual void Release();virtual BOOL AddName(LPCSTR szName, DWORD dwReserved);virtual BOOL DeleteName(LPCSTR szName);}II、Foo.cpp#include “IFoo.h”#include “Foo.h”BOOL CFoo::AddName(LPCSTR szName, DWORD dwReserved){return(m_listName.Insert(szName));}BOOL CFoo::DeleteName(LPCSTR szName){m_listName.Top();BOOL bFind = FALSE;char *szListName;while(szListName = m_listName.GetCurrent()){if (strcmp(szListName, szName) == 0) {bFind = TRUE;m_listName.RemoveCurrent();}elsem_listName.Next();}return bFind;}void CFoo::Release(){m_listName.Top();while(m_listName.GetCurrent()) m_listName.RemoveCurrent();delete this;}3、客户的使用:Client.dspI、Extern.hclass CExtern{private:IFoo* m_pFoo;public:CExtern() {m_pFoo = NULL;}void CreateIFoo();void UseIFoo();void NotUserIFooNever();}II、Extern.cpp#include “../Include/IFoo.h”// 后面有一章“一些规范”里会解释这个路径#include “Extern.h”void CExtern::CreateIFoo(){。
// 为阅读,省略了一些加栽dll的代码if (!CreateFoolObject(&m_pFoo);m_pFoo = NULL;}void CExtern::UseIFoo(){if (m_pFoo)m_pFoo->AddName(“Test”);}void CExtern::NotUseIFooNever(){if (m_pFoo){m_pFoo->Release();m_pFoo = NULL;}}三、先实例化服务,再实例化客户有时,先实例化服务,然后再实例化客户。
例如:我们的游戏服务器和游戏框架,就是采用这种方式。
此时,由服务调用客户的创建函数,并将自己的接口指针做为参数传给客户。
第三节接口对象的销毁接口对象的销毁,不应该由客户用delete来完成。
一般,接口对象都提供一个Release(或close)虚函数,自己负责销毁自己。
这个可以从上面例子可以看出,如果用下面的下法:void CExtern::NotUseIFooNever(){if (m_pFoo){delete m_pFoo;m_pFoo = NULL;}}那么,对于CExtern,它只看到了IFoo这片内存区,是不知道有m_listName这样一个动态列表的对象的,所以当调用delete m_pFoo时,m_listName是无法删除的,这样只能产生内存泄露。