草庐IT

行为型:二. 模板方法模式

模板方法模式是什么模版方法模式是设计模式中的行为型的一种模式,它在基类中定义了一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤。为什么要用模板方法模式模板方法将整个算法转换为一系列独立的步骤,以便子类能对其进行扩展,同时还可让超类中所定义的结构保持完整。或者当多个类的算法步骤一致,只是一些细微之处不同时,可用该模式。模板方法模式怎么实现让我们来考虑一个一次性密码功能(OTP)的例子。将OTP传递给用户的方式多种多样(短信、邮件等)。但无论是短信还是邮件,整个OTP流程都是相同的:生成随机的n位数字。在缓存中保存这组数字以便进行后续验证。准备内容。发送通知。发布。我们定义了固定的模

python函数基础

函数基础函数的作用函数就是包裹一部分的代码,实现某一个功能,达成某一个目的,而且当这段代码如果使用或者重复使用的时候,只需要很简单的调用即可,大大减少了代码的维护难度。函数的特点可以反复调用,提高代码的复用性,提升开发效率,便于维护管理。函数的定义和调用函数的定义要使用到关键字def,且函数定义不会执行函数中的代码,而是需要调用函数才会执行。定义方法定义函数在关键字def后面加上函数名,然后后面加上括号,括号中可以酌情选择是否写上参数,在对应的作用域中写上代码。#语法:deffunction_name([parameter0],[parameter1]):code0code1code2……调用

python函数基础

函数基础函数的作用函数就是包裹一部分的代码,实现某一个功能,达成某一个目的,而且当这段代码如果使用或者重复使用的时候,只需要很简单的调用即可,大大减少了代码的维护难度。函数的特点可以反复调用,提高代码的复用性,提升开发效率,便于维护管理。函数的定义和调用函数的定义要使用到关键字def,且函数定义不会执行函数中的代码,而是需要调用函数才会执行。定义方法定义函数在关键字def后面加上函数名,然后后面加上括号,括号中可以酌情选择是否写上参数,在对应的作用域中写上代码。#语法:deffunction_name([parameter0],[parameter1]):code0code1code2……调用

go-浅学设计模式随记

责任链模式组成:由多个处理器及处理器处理标志串联组成作用:常用于处理流水线事务,利用多个处理器对同一个对象进行处理,可以利用各处理器开关场景:常见逻辑层处理逻辑:获取参数、fetch数据、逻辑处理数据、返回参数一系列数据处理优点:将复杂的流水线处理逻辑简化为一个个单元,操作较为便捷,可以随意在处理器之间串联穿插新处理器packageburden_chainimport"fmt"/*责任链模式组成:由多个处理器及处理器处理标志串联组成作用:常用于处理流水线事务,利用多个处理器对同一个对象进行处理,可以利用各处理器开关场景:常见的获取参数、fetch数据、逻辑处理数据、返回参数一系列数据连续化处理

go-浅学设计模式随记

责任链模式组成:由多个处理器及处理器处理标志串联组成作用:常用于处理流水线事务,利用多个处理器对同一个对象进行处理,可以利用各处理器开关场景:常见逻辑层处理逻辑:获取参数、fetch数据、逻辑处理数据、返回参数一系列数据处理优点:将复杂的流水线处理逻辑简化为一个个单元,操作较为便捷,可以随意在处理器之间串联穿插新处理器packageburden_chainimport"fmt"/*责任链模式组成:由多个处理器及处理器处理标志串联组成作用:常用于处理流水线事务,利用多个处理器对同一个对象进行处理,可以利用各处理器开关场景:常见的获取参数、fetch数据、逻辑处理数据、返回参数一系列数据连续化处理

GO实现Redis:GO实现内存数据库(3)

实现Redis的database层(核心层:处理命令并返回)https://github.com/csgopher/go-redis本文涉及以下文件:dict:定义字典的一些方法sync_dict:实现dictdb:分数据库command:定义指令ping,keys,string:指令的具体处理逻辑database:单机版数据库datastruct/dict/dict.gotypeConsumerfunc(keystring,valinterface{})booltypeDictinterface{Get(keystring)(valinterface{},existsbool)Len()in

GO实现Redis:GO实现Redis协议解析器(2)

本文实现Redis的协议层,协议层负责解析指令,然后将指令交给核心database执行echodatabase用来测试协议层的代码https://github.com/csgopher/go-redisRESP协议RESP是客户端与服务端通信的协议,格式有五种:正常回复:以“+”开头,以“\r\n”结尾的字符串形式错误回复:以“-”开头,以“\r\n”结尾的字符串形式整数:以“:”开头,以“\r\n”结尾的字符串形式多行字符串:以“$”开头,后跟实际发送字节数,再以“\r\n”开头和结尾$3\r\nabc\r\n数组:以“*”开头,后跟成员个数SETkeyvalue*3\r\n$3\r\nSE

GO实现Redis:GO实现内存数据库(3)

实现Redis的database层(核心层:处理命令并返回)https://github.com/csgopher/go-redis本文涉及以下文件:dict:定义字典的一些方法sync_dict:实现dictdb:分数据库command:定义指令ping,keys,string:指令的具体处理逻辑database:单机版数据库datastruct/dict/dict.gotypeConsumerfunc(keystring,valinterface{})booltypeDictinterface{Get(keystring)(valinterface{},existsbool)Len()in

GO实现Redis:GO实现Redis协议解析器(2)

本文实现Redis的协议层,协议层负责解析指令,然后将指令交给核心database执行echodatabase用来测试协议层的代码https://github.com/csgopher/go-redisRESP协议RESP是客户端与服务端通信的协议,格式有五种:正常回复:以“+”开头,以“\r\n”结尾的字符串形式错误回复:以“-”开头,以“\r\n”结尾的字符串形式整数:以“:”开头,以“\r\n”结尾的字符串形式多行字符串:以“$”开头,后跟实际发送字节数,再以“\r\n”开头和结尾$3\r\nabc\r\n数组:以“*”开头,后跟成员个数SETkeyvalue*3\r\n$3\r\nSE

Swift5: App模块化

AppDemo.png目标是将序列化和网络请求做成单独的framework并且可以替换.所有公用的东西都放在公共库Common中.workspace'AppDemo.xcworkspace'platform:ios,'13.0'use_frameworks!load'./Api/api_v1.rb'target:Commondoproject'Common/Common.xcodeproj'pod'Alamofire'endtarget:AppDemodoproject'App/AppDemo/AppDemo.xcodeproj'pod'Common',:path=>'./Common/'lo