项目地址

项目背景

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);
          }
      }
      
      

发表评论