Delphi 设计模式:《HeadFirst设计模式》Delphi7代码
1. 复杂的子系统
unit uSubObject;
interface
type
{ TAmplifier与TTuner,TCDPlayer,TDVDPlayer相互依赖。 }
{ 在TTuner等的简单实现时用不到对TAmplifier的引用, }
{ 但现实生活中就应该让TAmplifier提供服务,所以这里保留了。 }
{ TProjector对TDVDPlayer的引用也是同样道理。 }
{ 前置TAmplifier也可以,把TAmplifier的声明放在TTuner等声明的后面 }
TTuner = class;
TCDPlayer = class;
TDVDPlayer = class;
TAmplifier = class(TObject)
private
FTuner: TTuner;
FCD : TCDPlayer;
FDVD: TDVDPlayer;
FDescription: String;
public
constructor Create(aDescription: String);
procedure Open;
procedure Off;
procedure SetStereoSound;
procedure SetSurroundSound;
procedure SetVolume(aLevel: Integer);
procedure SetTuner (aTuner: TTuner);
procedure SetCD (aCD : TCDPlayer);
procedure SetDVD(aDVD: TDVDPlayer);
function ToString: String;
end;
TTuner = class(TObject)
private
FAmplifier: TAmplifier;
FDescription: String;
FFrequency: Double;
public
constructor Create(aDescription: String; aAmplifier: TAmplifier);
procedure Open;
procedure Off;
procedure SetAm;
procedure SetFm;
procedure SetFrequency(aFrequency: Double);
function ToString: String;
end;
TCDPlayer = class(TObject)
private
FAmplifier: TAmplifier;
FDescription: String;
FCurrentTrack: Integer;
FTitle: String;
public
constructor Create(aDescription: String; aAmplifier: TAmplifier);
procedure Open;
procedure Off;
procedure Eject;
procedure Play(aTitle: String ); overload;
procedure Play(aTrack: Integer); overload;
procedure Stop;
procedure Pause;
function ToString: String;
end;
TDVDPlayer = class(TObject)
private
FAmplifier: TAmplifier;
FDescription:
相关文档:
在一个单元中声明的多个类互为友元类
type
TMyClass = class
GUID: string;
Name: string;
bSex: Boolean;
Tel : string;
end;
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedu ......
容器的主要职责有两个:存放元素和浏览元素。根据单一职责原则(SRP)要将二者分开,于是将浏览功能打包封装就有了迭代器。
用迭代器封装对动态数组的遍历:
1.容器中的元素类
{《HeadFirst设计模式》之迭代器模式 }
{ 容器中的元素类 ......
什么是多态,字面意思就是“多种形态”,用对象来讲就是子类继承基类,而不同的子类又分别对基类进行功能的扩展。
多态在Object Pascal中是通过虚方法实现的(Virtual Method),在Object Pascal中基类的虚方法是可以被派生类覆盖(Override)的 ......
1.策略类
{《HeadFirst设计模式》之策略模式 }
{ 本单元中的类为策略类 }
{ 编译工具: Delphi7.0 }
{ E-Mail : xshlife@163.com }
unit uStrategy;
interface
type
{飞行接口,及其实现类 }
IFlyBehavior = Interface(IInterface)
procedure Fly;
......
1.被装饰者
{《HeadFirst设计模式》之装饰模式 }
{ 本单元中的类为被装饰者 }
{ 编译工具: Delphi7.0 }
{ E-Mail : xshlife@163.com }
unit uComponent;
interface
type
TBeverage = class(TObject) //抽象饮料类
protected
FDescription: String;
public
......