RAD Studio 10.2.3 测试√
运行结果:
使用方法:
procedure TDesignPattern.Button_FactoryPatternClick(Sender: TObject);
var
mBigBoss: TBigBoss;
mFactory: IFactoryMgr;
begin
mBigBoss := TBigBoss.Create;
mFactory := mBigBoss.GetFactory('小米手机');
mFactory.Make;
mFactory := mBigBoss.GetFactory('小米电脑');
mFactory.Make;
mFactory := mBigBoss.GetFactory('华为手机');
mFactory.Make;
mFactory := mBigBoss.GetFactory('华为电脑');
mFactory.Make;
mFactory := mBigBoss.GetFactory('苹果手机');
mBigBoss.Free;
end;
工厂模式单元:
unit uFactoryPattern;
{------------------------------------------------------------------------------}
{ 单元描述: 工厂模式 }
{ 单元作者: XiaoYin }
{ 创建时间: 2021-11-08 }
{ 描 述: 我目前理解的工厂模式,欢迎各位大佬对我指指点点,我会加以改正 }
{ }
{ 工厂就是制造物品的地方,可以有制造手机工厂、制造电脑的工厂,其中 }
{ 还可以分为制造不同品牌的手机或者电脑,然后就需要一个大老板进行对 }
{ 接,让需要工厂帮忙生产的手机公司可以找到工厂生产,需要订单的工厂 }
{ 能够有订单可生产,其中关键的就是这个大老板,统一进行分配。 }
{ 总 结: 工厂模式就是工厂目前已经存在的就那些,如果想要新的工厂可以再建, }
{ 需要工厂的一方,找到大老板问有没有我可以加工我的产品的工厂,然后 }
{ 大老板对需求者提供的信息去查找,如果有就告诉你这个工厂的信息,这 }
{ 双方就有了联系,完成各自所需。 }
{------------------------------------------------------------------------------}
interface
type
// 这是工厂的管理者,是大老板的员工
IFactoryMgr = interface
['{EB02758A-3884-4179-8052-12EA8A205E61}'] // 可以 Ctrl + Shift + G 生成GUID
procedure Make;
end;
// 这是工厂01,其归属 IFactoryMgr 所管理
TFactory_01 = class(TInterfacedObject, IFactoryMgr)
public
procedure Make;
end;
// 这是工厂02,其归属 IFactoryMgr 所管理
TFactory_02 = class(TInterfacedObject, IFactoryMgr)
public
procedure Make;
end;
// 这是工厂03,其归属 IFactoryMgr 所管理
TFactory_03 = class(TInterfacedObject, IFactoryMgr)
public
procedure Make;
end;
// 这是工厂04,其归属 IFactoryMgr 所管理
TFactory_04 = class(TInterfacedObject, IFactoryMgr)
public
procedure Make;
end;
TBigBoss = class
public
constructor Create;
destructor Destroy; override;
function GetFactory(AFactoryName: string): IFactoryMgr;
end;
implementation
uses
uFrmDesignPattern;
procedure NotifyMsg(AMsgStr: string);
begin
DesignPattern.Memo_Log.Lines.Add(AMsgStr);
end;
{ TFactory_01 }
procedure TFactory_01.Make;
begin
NotifyMsg('工厂01 生产小米手机');
end;
{ TFactory_02 }
procedure TFactory_02.Make;
begin
NotifyMsg('工厂02 生产华为手机');
end;
{ TFactory_03 }
procedure TFactory_03.Make;
begin
NotifyMsg('工厂03 生产小米电脑');
end;
{ TFactory_04 }
procedure TFactory_04.Make;
begin
NotifyMsg('工厂04 生产华为电脑');
end;
{ TBigBoss }
constructor TBigBoss.Create;
begin
end;
destructor TBigBoss.Destroy;
begin
inherited;
end;
function TBigBoss.GetFactory(AFactoryName: string): IFactoryMgr;
begin
Result := nil;
if AFactoryName = '小米手机' then
begin
Result := TFactory_01.Create;
end
else
if AFactoryName = '华为手机' then
begin
Result := TFactory_02.Create;
end
else
if AFactoryName = '小米电脑' then
begin
Result := TFactory_03.Create;
end
else
if AFactoryName = '华为电脑' then
begin
Result := TFactory_04.Create;
end
else
begin
NotifyMsg('抱歉没有你想要的工厂');
end;
end;
end.
一点点笔记,以便以后翻阅。