惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
Y
Y Combinator Blog
博客园 - Franky
D
Docker
B
Blog RSS Feed
M
MIT News - Artificial intelligence
雷峰网
雷峰网
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
宝玉的分享
宝玉的分享
S
SegmentFault 最新的问题
GbyAI
GbyAI
Recent Announcements
Recent Announcements
Martin Fowler
Martin Fowler
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MyScale Blog
MyScale Blog
B
Blog
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
Vercel News
Vercel News
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google DeepMind News
Google DeepMind News

ccagml

使用valgrind观察luajit进程内存 - ccagml 从生产环境报错学习protobuf编码规则 - ccagml 拨开迷雾,探寻深夜游戏集群启动失败真相 - ccagml 从技能状态图标显示错误到给 LuaJIT 报告bug - ccagml 游戏系统MySQl执行超时问题排查 - ccagml lua中pairs和ipairs都做了什么操作 - ccagml lua中#号是怎么计算字符串长度的 - ccagml lua中#号是怎么计算长度的 - ccagml lua中tonumber做了什么 - ccagml
跟着vscode插件学设计模式-工厂模式 - ccagml
2022-11-20 · via ccagml

项目地址

项目背景

leetcode_extension项目是一个Visual Studio Code插件,在插件市场也有发布

工厂模式相关概念

  • 创建型模式
  • 主要解决:解决接口选择问题
  • 如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。
  • 优点:
    1. 根据字符串名称创建对象
    2. 扩展性高,如果想增加一个子类功能,只要扩展一个工厂类就可以。
    3. 屏蔽产品的具体实现,调用者只关心可使用的接口。
  • 缺点:
    1. 每增加一个功能,都需要改动增加一个具体的子类和对象实现工厂。
    2. 类的数量变多,复杂度上升,系统对具体类的依赖

项目中的代码

  1. 调用入口
    • src/rpc/childMain.ts
          let curApi: IApi | undefined = apiFactory.getApi(com_str);
          curApi?.call(curApi?.callArg(process.argv));
      
    • 这里根据com_str一个字符串名称,从apiFactory中获取对应的api子类对象,并执行api的接口call
  2. apiFactory的实现
    • src/rpc/factory/apiFactory.ts
      import { cacheApi } from "./api/cacheApi";
      import { pluginApi } from "./api/pluginApi";
      '''
      '''
      import { IApi } from "./apiBase";
      
      class ApiFactory {
      constructor() {}
      getApi(api: string): IApi | undefined {
          if (api == "cache") {
          return cacheApi;
          } else if (api == "plugin") {
          return pluginApi;
          }
          }
          return undefined;
      }
      }
      export const apiFactory: ApiFactory = new ApiFactory();
      
      
      • 根据字符串创建对应的api功能类
      • 所有api功能类都继承自apiBase
  3. 所有api的基类
    • src/rpc/factory/apiBase.ts
      export interface IApi {
          callArg(arg);
          call(arg): void;
      }
      
      export class ApiBase implements IApi {
          constructor() {}
          callArg(arg: any) {
              console.log("未实现callArg", arg);
          }
          call(arg: any) {
              console.log("未实现call", arg);
          }
          api_argv() {
              console.log("未实现api_argv", arg);
          }
      }