Delphi建造者模式

    声明:虽然本文是说的Delphi设计模式,但是设计模式本身并不局限于某一种语言,只是因为我本人对Delphi熟悉一些,所以是用Delphi来表示。

    该模式应用场景:当干某一个事情需要经过多个复杂的步骤的时候,而且某一个步骤可能因为时间、地点、人物等条件的不同,所需要的方

也不同。举例说明:本文以生产手机来说明。手机的品牌虽然有很多,但是手机的组成部分却是一样的,比如芯片,屏幕、电池、摄像头等,组装

的时候,也是按照一定的步骤、顺序组装的,每一个部件缺一不可,这些是相同点(有可能不同的厂家组装顺序不一样,不用过多纠结这一点);

更大的差异来源于配件,有的厂家自己生产,有的却是去采购,采购来源还不一样。一下是具体代码:

 //建造者模式相关类单元

unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
  //手机生产接口
  IPhoneInterface = interface
    procedure getScreen;
    procedure getChip;
    procedure getBattery;
    procedure getCamera;
    procedure Assemble;
  end;

  //手机厂商A
  TPhoneA = class(TInterfacedObject,IPhoneInterface)
  public
    procedure getScreen;
    procedure getChip;
    procedure getBattery;
    procedure getCamera;
    procedure Assemble;
  end;

  //手机厂商B
  TPhoneB = class(TInterfacedObject,IPhoneInterface)
  public
    procedure getScreen;
    procedure getChip;
    procedure getBattery;
    procedure getCamera;
    procedure Assemble;
  end;

  //控制手机生产类,避免手机生产过程中某一个工序漏了,组装前其他手机部件
  //必须全部到位
  TManageProduction = class
  private
    FPhone : IPhoneInterface;
  public
    procedure production;
    constructor Create(Phone : IPhoneInterface);
  end;

implementation
   uses uMyCommon;
procedure TPhoneA.getScreen;
begin
   Writelog('生产屏幕');
end;

procedure TPhoneA.getChip;
begin
  Writelog('生产芯片');
end;

procedure TPhoneA.getBattery;
begin
  Writelog('生产电池');
end;

procedure TPhoneA.getCamera;
begin
  Writelog('生产摄像头');
end;

procedure TPhoneA.Assemble;
begin
  Writelog('开始组装');
end;

procedure TPhoneB.getScreen;
begin
  Writelog('采购屏幕');
end;

procedure TPhoneB.getChip;
begin
  Writelog('采购芯片');
end;

procedure TPhoneB.getBattery;
begin
  Writelog('采购电池');
end;

procedure TPhoneB.getCamera;
begin
  Writelog('采购摄像头');
end;

procedure TPhoneB.Assemble;
begin
  Writelog('开始组装');
end;

constructor TManageProduction.Create(Phone: IPhoneInterface);
begin
  FPhone := Phone;
end;

procedure TManageProduction.production;
begin
  FPhone.getScreen;
  FPhone.getChip;
  FPhone.getBattery;
  FPhone.getCamera;
  FPhone.Assemble;
end;

end.
 

//调用单元

procedure TForm1.Button1Click(Sender: TObject);
var
  phone :IPhoneInterface;
  manage : TManageProduction;
begin
  phone := TPhoneA.Create;
  manage := TManageProduction.Create(phone);
  manage.production;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  phone :IPhoneInterface;
  manage : TManageProduction;
begin
  phone := TPhoneB.Create;
  manage := TManageProduction.Create(phone);
  manage.production;
end;

//本文举例比较极端,A厂家的配件完全自研,B厂家全部采购,不过道理却是相通的

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值