unit Factory; interface uses Windows, Messages, SysUtils, Controls, Product; type IFactoryInterface = interface function factory(): IProductInterface; end; TFactory1 = class(TControl, IFactoryInterface) public function factory(): IProductInterface; end; TFactory2 = class(TControl, IFactoryInterface) public function factory(): IProductInterface; end; implementation function TFactory1.factory(): IProductInterface; var AProduct: TProduct1; begin AProduct := TProduct1.Create(nil); Result := AProduct.CreateProduct(); end; function TFactory2.factory(): IProductInterface; var AProduct: TProduct2; begin AProduct := TProduct2.Create(nil); Result := AProduct.CreateProduct(); end; end.
unit Product; interface uses Windows, Messages, SysUtils, Controls, Dialogs; type IProductInterface = interface function CreateProduct(): IProductInterface; end; TProduct1 = class(TControl, IProductInterface) public function CreateProduct(): IProductInterface; end; TProduct2 = class(TControl, IProductInterface) public function CreateProduct(): IProductInterface; end; implementation function TProduct1.CreateProduct(): IProductInterface; begin Result := Self; showmessage('Product1 Created'); end; function TProduct2.CreateProduct(): IProductInterface; begin Result := Self; showmessage('Product2 Created'); end; end.
//测试 procedure TForm1.Button1Click(Sender: TObject); var AFactory: TFactory1; begin AFactory := TFactory1.Create(Self); AFactory.factory; FreeAndNil(AFactory); end; procedure TForm1.Button2Click(Sender: TObject); var AFactory: TFactory2; begin AFactory := TFactory2.Create(Self); AFactory.factory; FreeAndNil(AFactory); end;

|