接口

1111

China☆狼群 提交于 2020-03-10 11:36:42
 常用的设计模式有23种,但是最常见的设计模式却只有七八种,今天我们就来说说最常见的设计模式之一的代理模式。代理模式的核心思想用一句话概述就是:保护被代理的对象,控制访问。   用一句话概述代理模式很简单,但是实际做起来很多同学可能还是不理解代理模式的应用场景,我们今天就用邓哥的例子来说说代理模式究竟是怎么样的~   话说邓哥的四大爱好是抽烟、喝酒、烫头、浪~邓哥出名之后,邓嫂就开始对邓哥严加管教,邓嫂开始充当起了邓哥经纪人的角色~   代理模式很像是经纪人和明星之间的关系,经纪人的重要功能之一就是做一个filter(拦截器),帮助明星挡住外面很多的事情,以达到保护明星的作用。   我们的代理模式也是这样,把原本的对象或者接口保护在里面,不然别人直接访问到,在访问之前要经过重重的过滤,以此来达到保护接口的作用。   这个时候,如果我们想约邓哥出来玩,邓嫂就会果断的拒绝我们~这个消息都不会传到邓哥那里~   在我们的系统中,有很多比较重要的接口需要进行这样的保护,比如支付类接口、用户登录接口等涉及到钱或者用户信息相关的敏感接口,除了接口本身需要有良好的防御能力之外,通常还会有相应的代理来对接口进行保护。   如果来访问的请求参数是异常的就直接返回,不用访问后面的真正接口,从而达到保护接口的目的。   如果我们问的问题是可以让邓哥处理的,邓嫂就会把消息告诉邓哥,然后邓哥再进行处理。  

Serializable接口

徘徊边缘 提交于 2020-03-10 10:54:28
一般情况下,我们在定义实体类时会继承Serializable接口,类似这样: 我们在实体类中引用了Serializable这个接口,那么这个接口到底有什么?细心的你会发现我们还定义了个serialVersionUID变量。这个变量到底有什么作用? 什么是Serializable接口一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才能被序列化。 什么是序列化? 序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。 为什么要序列化? 1 .对象把对象转换为字节序列的过程称为对象的序列化 2 .把字节序列恢复为对象的过程称为对象的反序列化 什么情况下需要序列化? 当我们需要把对象的状态信息通过网络进行传输,或者需要将对象的状态信息持久化,以便将来使用时都需要把对象进行序列化那为什么还要继承Serializable。那是存储对象在存储介质中,以便在下次使用的时候,可以很快捷的重建一个副本。 或许你会问,我在开发过程中,实体并没有实现序列化,但我同样可以将数据保存到mysql、Oracle数据库中,为什么非要序列化才能存储呢?我们来看看Serializable到底是什么,跟进去看一下,我们发现Serializable接口里面竟然什么都没有,只是个空接口。

设计模式遵循的六大原则

六眼飞鱼酱① 提交于 2020-03-10 08:51:25
1.单一职责原则(SRP) 1.就一个类而言,应该只有一个引起他变化的原因。 2.一个类应该是一组高度相关的方法、数据的封装 3.也就是高内聚。 2.开放关闭原则(OCP) 对修改关闭,对扩展开放 3.里氏替换原则(LSP) 1.继承 2.所有引用父类的地方,必须能透明的使用其子类对象,只要父类出现的地方,子类就能出现,并且替换为子类不会出现任何异常和错误。 4.依赖倒置原则(DIP) 1.面向接口编程 2.高层模块(调用端)不应该依赖于底层模块(具体实现类),两者都应该依赖于抽象,细节应该依赖于抽象 5.接口隔离原则(ISP) 最小接口,接口和接口之前职责隔离 6.迪米特原则(LOP) 1.最少知道原则 2.一个对象应该对其他对象了解的最少,不需要知道内部实现原理,只需要知道调用什么方法即可 3.高内聚,低耦合 来源: CSDN 作者: Little-Coder 链接: https://blog.csdn.net/gs838251686/article/details/104754938

JDK1.8版本以上接口里可以有具体实现方法?

十年热恋 提交于 2020-03-10 06:10:49
JDK1.8增加了Default关键字,使得我们的接口类里边可以有具体的方法,示例如下: 接口类: package com . dao ; public interface OrdersDao { void deleteOrder ( ) ; public default void aa ( ) { System . out . println ( "这是接口里实现的方法!!!!!" ) ; } } 实现类: package com . dao . impl ; import com . dao . OrdersDao ; public class OrdersImpl implements OrdersDao { @Override public void deleteOrder ( ) { // TODO Auto-generated method stub } public static void main ( String [ ] args ) { OrdersDao dao = new OrdersImpl ( ) ; dao . aa ( ) ; } } 输出结果如下: 来源: CSDN 作者: Leesin Dong 链接: https://blog.csdn.net/dataiyangu/article/details/104760505

C#集合类

你。 提交于 2020-03-10 06:01:04
1.System.Colloctions中表示集合的行为的接口有: 1)ICollection 定义所有集合的大小、枚举数和同步方法。派生于IEnumerable 它定义了集合类最基本的行为,所有的集合类都实现了这个接口(基接口) 但是它的行为太过基本:主要就是一个Count属性,单独实现它没有太大意义 2)IEnumerable 公开枚举数,该枚举数支持在集合上进行简单迭代 它只有一个方法 GetEnumerator(),该方法可以返回一个IEnumerator接口,通过它可以遍历集合 基本上所有的集合类都实现了这个接口 3)IList IList实现是可排序且可按照索引访问其成员的值的集合,它本身实现了ICollection和IEnumerable接口 是所有列表的抽象基类。IList 实现有三种类别:只读、固定大小、可变大小。 4)IDictionary IDictionary实现是键/值对的集合,它本身实现了ICollection和IEnumerable接口 是键/值对的集合的基接口。IDictionary 实现有三种类别:只读、固定大小、可变大小。 IDictionary可称为字典、映射或散列表,它根据键(任意类型)来访问值 ------------------------------ 2.System.Collections中可以直接使用的集合类有: 1

【C#编程最佳实践 二十一】如何将接口生成接口文档

若如初见. 提交于 2020-03-10 04:38:12
如果接口过多可能需要把这些接口生成一个文档来对外提供使用,这样可以大幅的减少咨询量,最近接的这个任务就是如此,所以如何快捷的将接口生成接口文档就至关重要。我们选取的是docfx工具来进行生成: 1 下载docfx工具 可以通过github直接下载 docfx ,进入页面后点击下载最新版本即可: 2 添加环境变量 安装好后,将docfx的安装路径添加系统的环境变量 3 初始化docfx 在docfx的安装目录,打开cmd命令窗口执行如下命令: docfx init -q 初始化docfx,执行完之后,在当前目录自动生成文件夹 docfx_project 4 创建和修改配置文件 在 docfx_project 创建好后,需要 创建一个过滤文件filterConfig.yml 用来过滤接口中不想对外暴露的部分 还需要 修改一个配置文件docfx.json 用来关联需要生成文档注释的项目。 创建过滤文件filterConfig.yml 在docfx_project 目录下直接创建即可: 过滤内容如下: Interface级别 的过滤是整个provider过滤不展示,包括其下的所有方法, Member 级别 表明过滤某个provider下的部分方法不展示 apiRules : - exclude : uidRegex : '^.*(IxxxProvider|IxxxProvider

JS实现点击按钮,下载文件

六眼飞鱼酱① 提交于 2020-03-10 04:30:04
今天在实现下载功能时,后台接口测试完成后,前台在调用时发现,因为系统是基于token的,又不想把token显示在url中,后来找到了一篇文章,讲解了如何通过构造form表单提交请求后端接口,实现文件下载,原文地址: https://www.cnblogs.com/hamsterPP/p/6763458.html ,内容如下: PS:本文说的,并非如何用js创建流、创建文件、实现下载功能。 而是说的:你已知一个下载文件的后端接口,前端如何请求该接口,实现点击按钮、下载文件到本地。(可以是zip啦、excel啦都是一样) 有两个方法:window.open()和通过form表单来提交。 在线例子: https://hamupp.github.io/gitblog/app/jsBasic/jsButtonDownloadFile/index.html 方法一:window.open("下载文件的后端接口"); *html结构* <button type="button" id="btn1">下载一个zip(方法1)</button> <button type="button" id="btn2">下载一个zip(方法2)</button> /*js部分*/ var $eleBtn1 = $("#btn1"); var $eleBtn2 = $("#btn2"); /

基于LayuiIM框架的聊天项目

拈花ヽ惹草 提交于 2020-03-10 00:18:39
1.介绍 技术架构:Springboot+websocket+MySQL+LayuiIM 注意事项: 此项目仅供交流学习,不可用于商业用途,更不可出售本项目源代码。如果出现问题本人概不负责。另外本项目的websocke架构不够完善,所以不建议使用在实际的项目中。 本项目的LayuIM代码未上传,LayuiIM代码是Layui收费的项目,如有需要可以去购买。 本项目所有前端主要JS和后台主要接口都加有注释,所以很容易看得懂 另外本项目如有不足之处,尽请谅解,也欢迎指出。 2.项目截图 1.聊天窗口界面 2.好友列表界面 3.聊天记录界面 4.收到消息提醒样式 5.整体样式: 3.安装教程 1.首先拉取拉取代码 仓库地址 git pull https://gitee.com/zyy_dawn/Layui-IM.git 2.将项目中的数据库文件夹下的layuiim.sql导入到MySQL数据库,数据库名称为layuiim。 4.使用idea打开项目,运行项目 5.从数据库的userinfo表中 选择一个userid(最好是SY1571476959767947449), 然后在 一个 浏览器中访问: http://localhost:8080/layuiim/1571476959767947449 然后再选择一个userid,最好是(SY1571476959767947441), 然后在

go-接口

房东的猫 提交于 2020-03-09 21:57:43
接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节。 接口 接口类型 在Go语言中接口(interface)是一种类型,一种抽象的类型。 interface 是一组 method 的集合,是 duck-type programming (鸭子类型编程)的一种体现。接口做的事情就像是定义一个协议(规则),只要一台机器有洗衣服和甩干的功能,我就称它为洗衣机。不关心属性(数据),只关心行为(方法)。 为什么要使用接口 type Cat struct{} func (c Cat) Say() string { return "喵喵喵" } type Dog struct{} func (d Dog) Say() string { return "汪汪汪" } func main() { c := Cat{} fmt.Println("猫:", c.Say()) d := Dog{} fmt.Println("狗:", d.Say()) } 上面的代码中定义了猫和狗,然后它们都会叫,你会发现main函数中明显有重复的代码,如果我们后续再加上猪、青蛙等动物的话,我们的代码还会一直重复下去。那我们能不能把它们当成“能叫的动物”来处理呢? 像类似的例子在我们编程过程中会经常遇到: 比如一个网上商城可能使用支付宝、微信、银联等方式去在线支付