《GOF设计模式》—模板方法(TEMPLATE METHOD)—Delphi源码示例:绘图

示例:绘图
说明:
考虑一个支持在屏幕上绘图的类View。一个视图在进入"焦点"(focus)状态时才可设定合适的特定绘图状态(如颜色和字体),因而只有成为"焦点"之后才能进行绘图。View类强制其子类遵循这个规则。

代码:
 
unit uView;

interface

uses
    Graphics;

type
    TView = class
    private
        FCanvas: TCanvas;
        FFocus: Boolean;
        procedure SetFocus();
        procedure ResetFocus();
    protected
        procedure DoDisplay(); virtual;
    public
        constructor Create(ACanvas: TCanvas);
        //---
        procedure Display();
    end;

    TMyView = class(TView)
    protected
        procedure DoDisplay(); override;
    end;

procedure Test(ACanvas: TCanvas);

implementation

procedure Test(ACanvas: TCanvas);
var
    AView: TView;
begin
    AView := TMyView.Create(ACanvas);
    AView.Display;
    AView.Free;
end;

procedure TView.Display();
begin
    SetFocus();
    DoDisplay();
    ResetFocus();
end;

procedure TView.DoDisplay();
begin
end;

procedure TView.SetFocus();
begin
    FFocus := True;
end;

procedure TView.ResetFocus();
begin
    FFocus := false;
end;

procedure TMyView.DoDisplay();
begin
    with FCanvas do
    begin
        Font.Color := clRed;
        TextOut(10, 10, '123');
    end;
end;

constructor TView.Create(ACanvas: TCanvas);
begin
    FCanvas := ACanvas;
end;

end.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值