Книга программиста/Проектирование программ в 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.