当前位置: 首页 > news >正文

wordpress core主题wordpress seo

wordpress core主题,wordpress seo,汽油价格网,企业网站备案名称有一个广告召回系统#xff0c;输入用户id就可以给用户推荐相应的广告#xff0c;一开始我们只有布尔检索和向量检索两种方式。 1. 面向接口编程#xff0c;而非实现 第一点就是定义接口#xff0c;客户端关注的是接口#xff0c;对客户端来说#xff0c;他只关心检索引…有一个广告召回系统输入用户id就可以给用户推荐相应的广告一开始我们只有布尔检索和向量检索两种方式。 1. 面向接口编程而非实现 第一点就是定义接口客户端关注的是接口对客户端来说他只关心检索引擎提供出来的接口是什么样子不在意检索引擎是如何实现的。所以第一点就是抽象出接口。 class Recall { public:virtual ~Recall() default;virtual void recall(std::string uid) 0; };2. 实现接口 我们有两个检索引擎一个倒排一个向量根据接口分别实现这两种召回 // 倒排检索 class InvertRecall : public Recall {void recall(std::string uid) override {std::cout uid : invert recall\n;} };// 向量检索 class VectorRecall : public Recall {void recall(std::string uid) override {std::cout uid : vector recall\n;} };3. 客户端调用 我们给客户端提供了两种召回方式客户端其实并不关心的他只关心接口是什么通过这个接口他就可以拿到自己想要的结果 Recall* vectorRecall new InvertRecall(); // 倒排召回 Recall* invertRecall new VectorRecall(); // 向量召回 invertRecall-recall(uid); vectorRecall-recall(uid); 我特意把名字写反了就是为了表示客户端其实并不关心具体的召回方式是什么谁来都一样他只关心recall接口根据recall接口就可以得到自己想要的结果我们在改进一下 class AggRecall { private:std::vectorstd::shared_ptrRecall m_recall; public:void addRecall(const std::shared_ptrRecall recall) {m_recall.emplace_back(recall);}void recall(std::string uid) {for (auto recall: m_recall) {recall-recall(uid);}} };4. 新增了三方接口 除了我们自己实现的两种召回方式还有一些其他的三方召回方式。当然人家也很专业也是面向接口编程同时提供了一种实现方案。 // 三方代码勿动以so方式提供 class ThirdPartyRecall { public:virtual ~ThirdPartyRecall() default;virtual void process(std::string uid, std::string thirdParty) 0; };class ThirdPartyRecallImp : public ThirdPartyRecall { public:void process(std::string uid, std::string thirdParty) override {std::cout thirdParty recall std::endl;} };这个时候客户端实现的AggRecall方案就要发生一些变化了因此三方的接口名字和参数和我们实现的召回接口不一样一种想当然的方式就是把所有召回引擎的接口统一大家都叫recall或者大家都叫process。 5. 统一接口 三方的召回接口是以so的方式提供的我们想要修改代码也不现实了一种愚蠢的方法就是修改自己的recall接口但是你有没有想过如果又有一个其他三方接口不一致怎么办呢 // 三方代码勿动以so方式提供 class GoogleRecall { public:virtual ~GoogleRecall() default;virtual void search(std::string uid) 0; };class GoogleRecallImp : public GoogleRecall { public:void search(std::string uid) override {std::cout uid : google search std::endl;} };6. 适配器 现在的问题就是如何把这些接口统一了其实很简单我们把三方的接口包一层不久可以了吗或者说重命名不就可以了吗 class ThirdPartyAdapter : public Recall { private:std::shared_ptrThirdPartyRecallImp thirdPartyRecall; public:explicit ThirdPartyAdapter(std::shared_ptrThirdPartyRecallImp recall) : thirdPartyRecall(std::move(recall)) {}void recall(std::string uid) override {thirdPartyRecall-process(uid, baidu);} }; 同样可以对其他的三方接口进行转换 class GoogleAdapter : public Recall { private:std::shared_ptrGoogleRecallImp googleRecall; public:explicit ThirdPartyAdapter(std::shared_ptrGoogleRecallImp recall) : googleRecall(std::move(recall)) {}void search(std::string uid) override {googleRecall-search(uid);} };就是这么简单我们把process函数用一个recall函数包装起来这样客户端在调用的时候依然调用的是recall函数而且也继承了Recall接口 int main() {auto invertRecall std::make_sharedInvertRecall();auto vectorRecall std::make_sharedVectorRecall();auto thirdRecall std::make_sharedThirdPartyRecallImp();auto googleRecall std::make_sharedThirdPartyAdapter(thirdRecall);auto aggRecall std::make_sharedAggRecall();aggRecall-addRecall(invertRecall);aggRecall-addRecall(vectorRecall);aggRecall-addRecall(googleRecall);aggRecall-doRecall(); }这个呢就叫适配器把其他接口转换成我们想要的接口。
http://www.sczhlp.com/news/181369/

相关文章:

  • 网店装修关键词排名优化技巧
  • 个人网站建设哪家快网站如何做伪静态
  • 网站seo推广方案黑科技wifi蹭网神器
  • 汕头网站设计哪家好wordpress 主机
  • 样式网站南京做南京美容整形网站
  • 360免费建站可以免费又永久吗免费加速器看国外网站
  • Linux设置分辨率(临时)
  • git克隆代码保留提交记录,从源仓库迁移到新仓库地址
  • CAD 多个dwg文件合成一张图(无需插件)
  • 鸿蒙应用开发从入门到实战(十八):组件编程思想之代码复用
  • Gerkin+Pytest(python)建立自动化(BDD)
  • 国内网站开发 框架做网站需要哪些费用
  • wordpress修改首页调用关键词排名优化方法
  • 做ppt的图片网站有哪些网站策划与建设
  • 北京做网站优化的公司有什么好黄页网站
  • 大气集团企业网站源码品牌网站建设只询大蝌蚪
  • asp.net 建立网站学做饼干网站
  • 无锡网站推广经理wordpress 图片延迟加载
  • 网站建设 发布设计师个人网站源码
  • 网站建站优化seo公司官网
  • 济宁网站建设 企诺咨询手机网站建设平台
  • 品牌网站建设 1蝌蚪小重庆网站建设百度推广
  • 网站开发网上教学工程业绩在建设厅网站都能查到
  • 哈尔滨网站建设培训学校做网站之前要安装什么
  • 做优惠券网站如何引流wordpress 安装主体
  • 网站开发找哪家discuz建网站
  • 做网站服务器用谁的机关网站建设建议
  • 建立网站主页注意那些方面镇江建设质量监督站网站
  • 做影视剧组演员垂直平台网站广州做网站的企业
  • 网站开发设计的源码google本地搜索