zoukankan      html  css  js  c++  java
  • 工厂类

    //水果类,它是一个抽象产品
    TFruit = Class(TObject)
    ...
    end;
    //
    苹果类,水果类的具体化
    TApple = class(TFruit)
    ...
    end;

    function Factory(): TFruit;
    var
        f:TFruit;
    begin
      //
    精髓就是这条语句了,明明创建了TApple对象,
      //
    却将他赋值给TFruit类型的变量
      //
    其实这样做好处大大的,后面就体会到了
      f:=TApple.Create();
      result:=f;
    end

    //------------------------------------------------------------------------------------------------type
      //
    水果类,它是一个抽象产品
      //
    仅仅声明了所有对象共有的接口,并不实现他们
      IFruit = interface(IInterface)
        function Grow: string; //
    生长
        function Harvest: string; //
    收获
        function Plant: string;//
    耕作
      end;

      //
    葡萄类,水果类的具体化
      TGrape = class(TInterfacedObject, IFruit)
        function Grow: string;
        function Harvest: string;
        function Plant: string;
      end;

      //
    苹果类,水果类的具体化
      TApple = class(TInterfacedObject, IFruit)
        function Grow: string;
        function Harvest: string;
        function Plant: string;
      end;

      //
    草莓类,水果类的具体化
      TStrawberry = class(TInterfacedObject, IFruit)
        function Grow: string;
        function Harvest: string;
        function Plant: string;
      end;
     
      //
    果园类,它就是工厂类,负责给出三种水果的实例
      TFruitGardener = class(TObject)
      public
        //1
    、注意 class 关键字,它定义工厂方法 Factory 是一个静态函数,可以直接使用
        //2
    、注意返回值,他返回的是最抽象的产品 IFruit 水果类接口
        //3
    、注意他有一个参数,来告诉工厂创建哪一种水果
        class function Factory(whichFruit:string): IFruit;
      end;


  • 相关阅读:
    git push提交出现Everything up-to-date提示问题
    启动Dubbo项目注册Zookeeper时提示zookeeper not connected异常原理解析
    linux环境搭建mysql5.7总结
    Hadoop学习笔记:运行wordcount对文件字符串进行统计案例
    kafka3.0创建topic出现zookeeper is not a recognized option
    sql_waf绕过
    win11环境映像劫持
    vulnhub靶场—devguru
    vulhub-Presidential靶场解题过程
    php命令执行无回显判断及利用方法
  • 原文地址:https://www.cnblogs.com/luckForever/p/7255005.html
Copyright © 2011-2022 走看看