1. 程式人生 > >Delphi 接口(9)-接口和面向對象編程

Delphi 接口(9)-接口和面向對象編程

eat boolean lan abs ons unit tex bst oem

技術分享圖片

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;

技術分享圖片

技術分享圖片

Delphi 接口(9)-接口和面向對象編程