Delphi 接口(9)-接口和面向对象编程

unit uSayHello;

interface

uses    
    SysUtils,
    Windows,
    Messages,
    Greaphics,
    Controls,
    Forms,
    Dialogs;

type 

IGreetable = interface
    ['|0000-0000-0000-0000|']
    function SayHello: PChar;
end;

TMan = class(TInterfacedObject,IGreetable)
    Language: string;
    Married: Boolean;
    Name: string;
    SkinColor: string;
    constructor create; virtual;
    function SayHello: PChar; virtual; abstract;
end;

TChinese = class(TMan)
public  
    constructor create; override;
private
    function SayHello: PChar; override;
end;

TAmerican = class(TMan)
public
    constructor create; override;
private 
    function SayHello: PChar; override;
end;

TFrnch = class(TMan)
public
    constructor create; override;
private
    function SayHello: pchar ;override;
end;

TKorean = class(TMan)
public
    constructor create; override;
private
    function SayHello: pchar ; override;
end;

TET = class(TInterfacedObject,IGreetable)
private
    function SayHello: pchar;
end;

TRobot = class(TInterfacedObject,Igreetable)
private
    function SayHello: pchar;
end;

implementation

constructor TMan.create;
begin
  Name := '张三';
  Language := '中文';
  SkinColor := 'yellow';
end;

constructor TChinese.create;
begin
    inherited;
end;

constructor TAmerican.create;
begin
    Name := 'Lee';
    Language := 'English';
    SkinColor := 'black';
end;

constructor TFrnch.create;
begin
    Name:='苏菲';
    Language := '法文';
    SkinColor := 'white';
end;

constructor TKorean.create;
begin
    Name := '韩国';
    Language := '韩文';
    SkinColor := 'yellow';
end;

function TChinese.SayHello;
begin
    result := '中国人:你好!';
end;

function TAmerican.SayHello;
begin
    result := 'American:Hello!';
end;

function TFrench.SayHello;
begin
    result := '法国人:你好';
end;

function TKorean.SayHello;
begin   
    result := '韩国人:你好';
end;

function TET.SayHello;
begin
    result := 'TET:你好';
end;

function TRobot.SayHello;
begin
    result := 'Robot:你好';
end;

unit uFromSayHello

uses    
    //...

type
TFormSayHello = class(TForm)
    btnUSA: TButton;
    btnKorean: TButton;
    btnCN: TButton;
    btnFrench: TButton;
    btnET: TButton;
    btnRobott: TButton;
    procedure btnUSAClick(Sender: TObject);
    procedure btnKoreanClick(Sender: TObject);
    procedure btnCNClick(Sender: TObject);
    procedure btnFrenchClick(Sender: TObject);
    procedure btnETClick(Sender: TObject);
    procedure btnRobottClick(Sender: TObject);
end;

procedure TFormSayHello.SayHello(greeting: IGreetable);
begin
    ShoeMessage(greeting.SayHello);
end;

procedure TFormSayHello.btnKoreanClick(Sender: TObject);
begin
    SayHello(TKorean.create);
end;

procedure TFormSayHello.btnCNClick(Sender: TObject);
begin
    SayHello(TChinese.create);
end;

procedure TFormSayHello.btnFrenchClick(Sender: TObject);
begin
    SayHello(TFrench.create);
end;

procedure TFormSayHello.btnETClick(Sender: TObject);
begin
    SayHello(TET.create);
end;

procedure TFormSayHello.btnRobottClick(Sender: TObject);
begin
    SayHello(TRobot.create);
end;

//进一步修改
unit uSayHello;

interface

uses    
    SysUtils,
    Windows,
    Messages,
    Greaphics,
    Controls,
    Forms,
    Dialogs;

type 

IGreetable = interface
    ['|0000-0000-0000-0000|']
    function SayHello: PChar;
end;

TMan = class(TInterfacedObject,IGreetable)
    Language: string;
    Married: Boolean;
    Name: string;
    SkinColor: string;
    constructor create; virtual;
    function SayHello: PChar; virtual; abstract;
end;

TChinese = class(TMan)
public  
    constructor create; override;
private
    function SayHello: PChar; override;
end;

TAmerican = class(TMan)
public
    constructor create; override;
private 
    function SayHello: PChar; override;
end;

TFrnch = class(TMan)
public
    constructor create; override;
private
    function SayHello: pchar ;override;
end;

TKorean = class(TMan)
public
    constructor create; override;
private
    function SayHello: pchar ; override;
end;

TET = class(TInterfacedObject,IGreetable)
private
    function SayHello: pchar;
end;

TRobot = class(TInterfacedObject,Igreetable)
private
    function SayHello: pchar;
end;

implementation

constructor TMan.create;
begin
  Name := '张三';
  Language := '中文';
  SkinColor := 'yellow';
end;

constructor TChinese.create;
begin
    inherited;
end;

constructor TAmerican.create;
begin
    Name := 'Lee';
    Language := 'English';
    SkinColor := 'black';
end;

constructor TFrnch.create;
begin
    Name:='苏菲';
    Language := '法文';
    SkinColor := 'white';
end;

constructor TKorean.create;
begin
    Name := '韩国';
    Language := '韩文';
    SkinColor := 'yellow';
end;

function TChinese.SayHello;
begin
    result := '中国人:你好!';
end;

function TAmerican.SayHello;
begin
    result := 'American:Hello!';
end;

function TFrench.SayHello;
begin
    result := '法国人:你好';
end;

function TKorean.SayHello;
begin   
    result := '韩国人:你好';
end;

function TET.SayHello;
begin
    result := 'TET:你好';
end;

function TRobot.SayHello;
begin
    result := 'Robot:你好';
end;

unit uFromSayHello

uses    
    //...

type
TFormSayHello = class(TForm)
    btnUSA: TButton;
    btnKorean: TButton;
    btnCN: TButton;
    btnFrench: TButton;
    btnET: TButton;
    btnRobott: TButton;
    procedure btnUSAClick(Sender: TObject);
    procedure btnKoreanClick(Sender: TObject);
    procedure btnCNClick(Sender: TObject);
    procedure btnFrenchClick(Sender: TObject);
    procedure btnETClick(Sender: TObject);
    procedure btnRobottClick(Sender: TObject);
end;

procedure TFormSayHello.SayHello(greeting: IGreetable);
begin
    ShowMessage(greeting.SayHello);
end;

//人类问候
procedure TFormSayHello.SayHello(AMan: TMan)
begin
    editName.text := AMan.Name;
    editLanguage.text := AMan.Language;
    editSkinColor.text := AMan.SkinColor;
    ShowMessage(AMan.SayHello);
end;

//这里新增来自非人类的另类问候方式.
//通过方法重载,使得程序的改动降低到最少.
procedure TFormSayHello.SayHello(greeting: Igreetable)
begin
    editName.text := copy(greeting.SayHello,1,6);
    editLanguage.text := copy(greeting.SayHello,7,4);
    editSkinColor.text := copy(greeting.SayHello,11,6);
    ShowMessage(greeting.SayHello);
end;

procedure TFormSayHello.btnKoreanClick(Sender: TObject);
begin
    SayHello(TKorean.create);
end;

procedure TFormSayHello.btnCNClick(Sender: TObject);
begin
    SayHello(TChinese.create);
end;

procedure TFormSayHello.btnFrenchClick(Sender: TObject);
begin
    SayHello(TFrench.create);
end;

procedure TFormSayHello.btnETClick(Sender: TObject);
begin
    SayHello(TET.create);
end;

procedure TFormSayHello.btnRobottClick(Sender: TObject);
begin
    SayHello(TRobot.create);
end;

 

转载于:https://www.cnblogs.com/YiShen/p/9865669.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值