Книга программиста/Проектирование программ в PascalABC.Net
Все программы, код которых выложен здесь, являются работоспособными. На момент написания программ использовалась среда PascalABC.Net 3.0.
Декоратор
правитьconst
Description = 'Car: (Width = {0}, Height = {1}, Cost = ${2})';
type
TCar = class
private
_Width, _Height: real;
_Cost: real;
public
property Width: real read _Width write _Width;
property Height: real read _Height write _Height;
property Cost: real read _Cost write _Cost;
constructor(w, h, c: real);
begin
Width := w;Height := h;
Cost := c;
end;
function ToString() := Format(Description, _Width, _Height, _Cost);
procedure Print() := Write(ToString());
procedure Println() := Writeln(ToString());
end;
TCarDecorator = class
private
_Reference: TCar;
_AddedCost: real;
public
property Reference: TCar read _Reference write _Reference;
property AddedCost: real read _AddedCost write _AddedCost;
constructor(car: TCar; c: real);
begin
Reference := car;AddedCost := c;
end;
function ToString() := Format(Description, _Reference.Width, _Reference.Height, _Reference.Cost + _AddedCost);
procedure Print() := Write(ToString());
procedure Println() := Writeln(ToString());
end;
begin
var Bus := new TCar(3, 7, 3);
Bus.Println();
var VipBus := new TCarDecorator(Bus, 10);
VipBus.Println();
end.