�� srMVUnit.pas -- Delphi�p���f��/�r���[�N���X

������

Java �� Observable �� Observer �� Delphi�ɈڐA���� TObservable �� TObserver �N���X�ł��B

���_�E�����[�h

mv100.zip (�T���v���v���O�������܂܂�Ă��܂�)

���g�����Əڍ�

������ Sun �� JavaTM 2 Platform, Standard Edition, 1.4.0 API �d�l ����q�؂��Ă��܂��B

TObservable �N���X�̃��\�b�h�ꗗ�ł��BJava �̃I���W�i���FObservable

���\�b�h �X�R�[�v ����
AddObserver(AObserver: TObserver) public �I�u�W�F�N�g�̃I�u�U�[�o�Z�b�g�ɃI�u�U�[�o��lj����܂��B
DeleteObserver(AObserver: TObserver) public �I�u�W�F�N�g�̃I�u�U�[�o�Z�b�g����I�u�U�[�o���폜���܂��B
NotifyObservers public �I�u�W�F�N�g���AHasChanged ���\�b�h�Ɏ������悤�ɕύX����Ă����ꍇ�A���̂��ׂẴI�u�U�[�o�ɂ��̂��Ƃ�ʒm���A���� ClearChanged ���\�b�h���Ăяo���āA���̃I�u�W�F�N�g�����͂�ύX���ꂽ��ԂłȂ����Ƃ������܂��B
NotifyObservers(AArg: TObject) public �I�u�W�F�N�g���AHasChanged ���\�b�h�Ɏ������悤�ɕύX����Ă����ꍇ�A���̂��ׂẴI�u�U�[�o�ɂ��̂��Ƃ�ʒm���A���� ClearChanged ���\�b�h���Ăяo���āA���̃I�u�W�F�N�g�����͂�ύX���ꂽ��ԂłȂ����Ƃ������܂��B
DeleteObservers public �I�u�U�[�o���X�g���������܂��B
SetChanged protected Observable �I�u�W�F�N�g��ύX���ꂽ���̂Ƃ��ă}�[�L���O���܂��B
ClearChanged protected �I�u�W�F�N�g�����͂�ύX���ꂽ��Ԃł͂Ȃ����ƁA���Ȃ킿�A�ŐV�̕ύX�����ׂăI�u�U�[�o�ɒʒm���ꂽ���Ƃ������܂��B
HasChanged public �I�u�W�F�N�g���ύX���ꂽ���ǂ����𔻒肵�܂��B
CountObservers public Observable �I�u�W�F�N�g�̃I�u�U�[�o�̐���Ԃ��܂��B

TObserver �̃��\�b�h�ꗗ�ł��BJava �̃I���W�i���FObserver

���\�b�h �X�R�[�v ����
Update(AObservable:TObservable; AArg:TObject) public ��Ď��I�u�W�F�N�g�ɕύX������ƁA���̃��\�b�h���Ăяo����܂��B

Java �� Observable �� interface �Ƃ��Ē�`����Ă��܂��B

Delphi �ɂ� interface �͂���킯�ł����A����� COM �����̌���d�l�ł���A�Œ�ł� IUnknown ���p�����Ȃ��Ƃ����܂���B�]���āADelphi �� TObserver �� interface �Ƃ��Ē�`���Ă��܂��ƁA�������������N���X�ł͕K�v�������̂� IUnknown �Ő錾����Ă��郁�\�b�h(QueryInterface�C_AddRef�C_Release��3��)���������Ȃ���΂Ȃ�Ȃ��Ȃ�܂��B�ȑO�͂��̕��@(��̃��\�b�h���`����)�� interface ���g���Ă������Ƃ��������̂ł����A���܂�Ɍ����ڂ������̂Ŏ~�߂܂����B

���̂��߂̕���p������܂��BTObserver �̓r���[�ł�����A�ʏ�� TForm ���̃r�W���A���R���|�[�l���g���ΏۂɂȂ�܂��B������Delphi �͑��d�p���������Ă��܂���̂ŁA���̂܂܂ł� TObserver ��g�ݍ��ނ��Ƃ��o���܂���B�����ŁA�t�H�[�����r���[�N���X���u���L�v���A�r���[�N���X���t�H�[���ɑ΂��čX�V�ʒm��`���鎖�ʼn������܂��B

�܂��AForm �ɍX�V�p�̃��\�b�h���`���܂��B

  TMyForm = class(TForm)
    private
      FMyFormListener: TObserverListener;
      procedure UpdateView(AObservable: TObservable);
      �c
  end;

TMyForm �Ɠ��� unit �ɁATObservable ����̍X�V�� TMyForm �ɓ`����N���X���`���܂��B

  TObserverListener = class(TObserver)
    public
     procedure Update(AObservable:TObservable; AArg:TObject);override;
  end;

TObserverListener�̎����͒P���ł��B

  procedure TObserverListener.Update(AObservable: TObservable);
  begin
    MyForm.UpdateView(AObservable as TModel);
  end;

���͂��������`�Ŏg�p���Ă��܂��B

�܂��AAddObserver ����^�C�~���O�����ł��B�P���ȃA�v���P�[�V�����̏ꍇ�A���̓v���W�F�N�g�\�[�X���� AddObserver ���Ă��܂��B�����ƕ��G�ȏꍇ�A�Ⴆ�� Observer �� Observable �̐������Ԃ���v���Ȃ��悤�ȃA�v���P�[�V�����̏ꍇ�ɂ́ATMyForm ���������g�� AddObserver ���邩�AObserver �� Observable �̐ڑ��֌W���Ǘ����邽�߂̃N���X��ʓr���܂��B

������̗\��

Listener�N���X�����鎖�̓t�H�[���̍X�V���\�b�h���ĂԂ����Ȃ킯�ŁA���������Ӗ��ł�Listener�N���X�̃C���X�^���X�͂ЂƂ‚����ɂ��āA���̃N���X�Ƀt�H�[�����̂��̂��X�V���\�b�h�̃|�C���^��o�^����悤�Ȍ`�ł��ǂ���������܂���B

�r���[�͎��������f������֘A�t�����폜���ꂽ�^�C�~���O��m�鎖���o���܂���B�֘A�t������Ă��Ȃ����ɋ��ʂ�\���������悤�ȏꍇ�ɂ͂��̃^�C�~���O��m�肽���Ȃ�܂��B����� TObserver �̃C�x���g�Ƃ��Ď������鎖���o���܂��B

�Ƃɂ������؂ɂ��悤�Ǝv���ΐF�X�Əo���܂����A���������v���~�e�B�u�ȃN���X�͒P���ȕ����g���Ղ��̂ŁA����Ƃ���Εʂ��̂Ƃ��č�邱�ƂɂȂ�Ǝv���܂��B