ikki@github.io:~$

  • 策略模式

    策略模式 策略模式属于 23 中设计模式中 行为模式 的一种, 其目的是封装类似算法的不同实现, 根据策略选择其中一种去执行 关键 特点 一个行为具有不同的实现方法 不同的实现方法之间的选择是互斥的,只能使用一种 优点 干掉语法中的 if...else..., 方便维护 可以任意扩展相同的实现 实践的关键 不同的实现方式需要抽象出一个实现接口 业务场景 原始实现 我们有一个支付场景的实现,用户可以选择 支付宝、微信支付、花呗 进行支付 那么,我们的实现可能像下面这个样子 public class AliPay { public void spendMoney(BigDecimal amount) { System.out.println("用 支付宝 支付"); } public void ohNo() { System.out.println("下个月要吃土了"); } } public class WeChatPay { public void costMoney(BigDecimal amount)...

  • 解剖http协议

    解剖HTTP协议 什么是HTTP 相比于称呼HTTP 是一个应用层协议, 我个人跟倾向于 称呼http 是一种类似json文字语法。http 分为请求和响应,其格式如下 request POST /path HTTP/1.1 Content-Type: application/x-www-form-urlencoded key1=value1&key2=value2 response HTTP/1.1 200 OK Content-Type: application/json { "key":"value" } 其中,请求报文中的第一行称为 请求行 , 第二行到空行为止称为 请求头 , 从空行的下一行开始到结束称为请求体 响应报文中的第一行称为 状态行 , 第二行到空行为止称为 响应头 , 从空行的下一行开始到结束称为 响应体 手工实现一个HTTP 请求 try { Socket socket = new Socket("www.baidu.com",80); StringBuilder sb...

  • Restful设计

    Restful设计 实践中的困惑 接口名称:通常会设计一个接口叫 /add 或者是 /insert, 后台对应数据的插入操作,但是从来没有互相约束为 一定叫add 还是叫insert 不幂等的设计:有时候会对某个开关设计一个叫 /toggle 或者 /switch, 调用一次会将这个状态置为相反的状态,在网络出现问题时,会出现和预期不一致的状态 杂乱的状态码设计:我们永远无法预料到程序里所有可能出现的错误,但是我们总是能知道我们期望的正确结果 Restful 的设计哲学 Restful1 是由 Roy Thomas Fielding2 在2000 年的博士论文中提出的。 一切皆资源 这令人想到 Linux 的设计哲学:一切皆文件 每个资源由唯一URL标识 资源处理使用 POST, GET, PUT, DELETE方法对应 创建,读取, 更新,删除操作,此处对应数据库的CURD操作 幂等性 一个请求执行一次和执行N次的结果是一致的 状态码 使用Http Status 处理一些蛋疼的例子 前提:restful 是一种设计风格,并不是明确的规范 一切皆资源 系统通常有一个用户登录,我们设计为 /login, 但是设计为 POST /sessions...