[�z�[���֖߂�] [�O��] [���] [����]

�f�U�C���p�^�[����ǂ݉���

�f�U�C���p�^�[���Ƃ�

�f�U�C���p�^�[���Ƃ́A�����̗ǂ��v���O���~���O�����邽�߂ɁA�悢�\�[�X�R�[�h���p�^�[�����������̂ŁAGoF��23�̃p�^�[�����悭�m���Ă��܂��B�f�U�C���p�^�[�����g�p���邱�ƂŁA�ė��p���̍����A�����e�i���X���ɗD�ꂽ�R�[�h���������Ƃ��ł��A�p�^�[�����̂��g�����ƂŁA�v���O���}�Ԃł̃R�~���j�P�[�V�������X���[�Y�ɂȂ�Ƃ����܂��B

���̃y�[�W�ł́A�f�U�C���p�^�[���̏Љ�E����ł͂Ȃ��A������Ƃ����R�����g�E�ᔻ�����ꂼ��ɏ����Ă����܂��B

�Ȃ̂ŁA�����ł͂��łɃf�U�C���p�^�[���ɂ‚��Ă�����x�w��ł���l��ΏۂƂ��܂��B�e�f�U�C���p�^�[���ɂ‚��ďڍׂ͉�����Ȃ��̂ŁA�ȉ��̃T�C�g��{���Q�l�ɂ��Ă��������B�l�ɂ���āA���߂��قȂ��Ă�����̂�����܂��B

�@�T�C�g
  GOF�̃p�^�[���ɂ‚���
  Java��HelloWorld�@�f�U�C���p�^�[��
  �f�U�C���p�^�[��
  Java����Ŋw�ԃf�U�C���p�^�[������
  �f�U�C���p�^�[���̊[������
  Java�v���O���}�̂��߂̃f�U�C���p�^�[������

�@����

  �w�I�u�W�F�N�g�w���ɂ�����ė��p�̂��߂̃f�U�C���p�^�[���x
  �wJava����Ŋw�ԃf�U�C���p�^�[������x
  �wJava����Ŋw�ԃf�U�C���p�^�[������ �}���`�X���b�h�ҁx
  �w�I�u�W�F�N�g�]�̂‚�����\Java�EUML�EEJB���}�X�^�[���邽�߂̋��ɂ̊�b�u��    Be Agile!�x
  �wJava�f�U�C���p�^�[���O��U��    �W���v���O���}�[�Y���C�u�����x
  �w�ƏK�f�U�C���p�^�[���x

�f�U�C���p�^�[���ւ̋^��

�f�U�C���p�^�[���ɂ‚��ĂQ�R�p�^�[������ƌ���܂����A�悭�ǂݍ��߂΁A�ގ��������̂������ł��B�Ȃ����̃p�^�[�������グ����̂��Ƌ^��Ɏv�����Ƃ�����܂��B

GoF��23�p�^�[�������̂܂܉�����Ă���{�������A���ׂ��Ȑ��񂪂��邩�̂悤�Ɍ����邹�����A�������Ė{���������Â炭�Ȃ��Ă����ۂ�����܂��B23�p�^�[�������ׂĂł͂Ȃ����A���̃p�^�[�����̃p�^�[���������n�߂������ɏo���ꂽ���̂ŁA��������Ă��Ȃ��Ǝv���̂ł��B�u�����p�^�[���v�ƌ�����Ɖ�������ȃe�N�j�b�N�Ȃ̂��ƍl���Ă��܂��A�������ē���Ƃ炦�Ă���̂ł͂Ȃ��ł��傤���B

���������āA�N���X�݌v�̏�ʃ��x���̃R���Z�v�g�ƁA�R�[�f�B���O�̃e�N�j�b�N����������ɂ����悤�Ȉ�ۂ�����܂��B

���̈�ۂł͂���Ȋ����ł��B

�E��ʃR���Z�v�g�i���܂�ɂ��p�r����̓I�߂���j
Strategy
Command
State
Interpreter

�E��ʃR���Z�v�g�i�N���X�\���̕��@�ł����ăe�N�j�b�N�ł͂Ȃ��B���R�Ɏg�����́j
Factory Method
Abstract Factory
Builder
Proxy
Facade
Memento
Prototype
Template
Mediator
Observer
Bridge

�E�e�N�j�b�N�i�𗧂‚��̂����邪�A���܂�g��Ȃ����̂�����j
Singleton
FlyWeight
Adaptor
Composite
Iterator
Visitor
Decorator
ChainOfResponsibility

�����23�̃p�^�[���̂����A�����I�Ƃ�����͍̂Ō�̂��̂����ŁA���͕��ʂɃN���X�݌v���Ă���Ώo�Ă�����̂ł����ăp�^�[���Ɩ��Â���قǂ̂��̂ł͂Ȃ��C�����܂��BSingleton��Flyweight�͂�����Ƃ����e�N�j�b�N�ł����āA�p�^�[���Ƃ��������C�f�B�I���Ƃ����������K�؂ȋC�����܂��B

�悭�A�f�U�C���p�^�[�������̂܂ܓK�p�ł��Ȃ��Ƃ����ӌ�������܂����A��������̂͂��ŁA�������Ă���̂̓N���X�\���ɂ�������ɂ����܂���B�����ɓ��Ă͂߂āA�u���̃A�v���P�[�V�����ɂ́����̃f�U�C���p�^�[�����g���Ă���v�ȂǂƎ�������͈̂Ӗ����Ȃ����A�ׂ������͂��āuStrategy��State�̈Ⴂ�͂����ł���v�Ȃǂƌ����Ώۂɂ���̂��Ӗ����Ȃ��Ǝv���܂��BGoF�̗�ɍ��v���Ă��Ȃ�������ʂ������Ǝv���̂��ԈႢ�ł��B

�ʏ�́A�ȉ��̂悤�ɂɂQ�R�̃f�U�C���p�^�[���𕪗ނ��Ă��܂����A����������p�x���番�ނ������Ǝv���܂��B

�@ �ړI
���� �\�� �U�镑��
�͈� �N���X Factory Method AdapterInterpreter
Template
�I�u�W�F�N�g Abstract Factory
Builder
Prototype
Singleton
Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
Chain of Responsibility
Command
Iterator
Mediator
Memento
Observer
State
Strategy
Visitor

�����̕���

�E�|�����[�t�B�Y���i�T�u�N���X�ɂ��؂�ւ��j
Template
Factory Method
Strategy
Command
State
Bridge
Composite
Interpreter
ChainOfResponsibility

�E����
Abstract Factory
Builder
Facade
Mediator

�EWrapper
Adapter
Proxy
Decorator
Memento

�E�@�\���U
Observer
Visitor
Iterator

�E�C���X�^���X���L
Singleton
FlyWeight
Prototype

���܂Ƃ߁�

�@ �|�����[�t�B�Y�� ���� �@�\���U ���� Wrapper �C���X�^���X�ێ�
Template ���@�@�@�@�@
Factory Method �����@�@�@�@
Strategy ���@�@�@�@�@
Command ���@�@�@�@�@
State ���@�@�@�@�@
Composite ���@�@�@�@�@
Interpreter ���@�@�@�@�@
Bridge ���@�@���@�@
ChainOfResponsibility ���@�@�@�@�@
Abstract Factory ���������@�@
Builder �@�������@�@
Facade �@�@�����@�@
Mediator �@�@�����@�@
Adaptor �@�@�@�����@
Proxy �@�@�@�����@
Decorator �@�@�@�@���@
Memento �@�@�@�@����
Observer ���@�����@�@
Visitor ���@�����@�@
Iterator �@�@�����@�@
Singleton �@���@�@����
FlyWeight �@���@�@����
Prototype �@���@�@����


�|�����[�t�B�Y���i�T�u�N���X�ɂ��؂�ւ��A���ۉ��j

�����ɕ��ނ����̂́A�I�u�W�F�N�g�w���̑�R�����A�|�����[�t�B�Y�����g�p�����p�^�[���ł��B�|�����[�t�B�Y�����g�p����ƁA���I�Ɏg�p����N���X��؂�ւ��邱�Ƃ��ł��܂��B���Q�Ɓ�

���ɕ��ނ���Ă�����̂ł��A�|�����[�t�B�Y�����d�v�Ȉʒu���߂Ă�����̂�����܂����A�����ł͂��ꂵ���g���Ă��Ȃ����̂������܂��B

�����f�U�C���p�^�[���S�̂�ʂ��ċ�������Ă���̂́A�C���^�[�t�F�[�X�Ńv���O���~���O�����Ƃ������Ƃł��B�����ւ̈ˑ����Ȃ����A�������邱�Ƃɂ���Đ݌v�̍��g�݂𖾂炩�ɂ���̂ł��B

Template

���̂悤�ȃ��\�b�h���������ꍇ�ɁA����B�̂Ƃ���������ɂ���ĕς������ꍇ������Ƃ��܂��B

class Hogehoge {
    void doit() {
         ... ����A ...

         ... ����B ...

         ... ����C ...
    }
}

���@�Ƃ��ẮA

�P�Dif���ŕ��򂳂���B

�Q�D�T�u�N���X������ă|�����[�t�B�Y���ɂ���B

���l�����܂��B

�P��K�p����ꍇ�A

    void doit() {
         ... ����A ...

         if (hoge == 1) {
             ... ����B ...
         }
         else {
             ... ����B' ...
         }

         ... ����C ...
    }

�̂悤�ɁAif����lj����ď����𕪂���ł��傤�B�������A���̏ꍇ�A���򂪑�����Α�����قǁA���̓s�x�Aelse if����lj����Ȃ���΂Ȃ�Ȃ��Ȃ�܂��B

�Q�̏ꍇ�́A����B�̂Ƃ�����A�ς��āA

    void doit() {
         ... ����A ...

         execute();

         ... ����C ...
    }

    void abstract execute();

�Ƃ��āA�T�u�N���X�Ɏ���������悤�ɂ��܂��B�T�u�N���X�����猩��΁A����ȊO�̂Ƃ���͋��ʏ����ƂȂ��Ă��邽�߁A���̏����̗��ꂪ��‚̃e���v���[�g�ɂȂ��Ă��܂��B

���ہA�݌v�̒i�K�ōŏ�����A���̍\����g�ݍ��ނ��Ƃ������A�e�������ƂɎ����N���X�𕪂��A�e�N���X���A

    void execute() {
        init();
        inputCheck();
        execMain();
    }
    void abstract init();
    void abstract inputCheck();
    void abstract execMain();

�Ƃ��āA���������ʉ������܂��i���̏ꍇ�A�e�N���X�ł̓��\�b�h���Ăԏ��������K�肵�āA�e���\�b�h�̏����̓T�u�N���X�ɔC���܂��j�B

Factory Method

�C���X�^���X�̐������������g�ł͌��肹���A�T�u�N���X�ɔC���܂��BAbstract Factory�ƈႢ�AFactory�N���X���g���l�������Ă��܂��BTemplate���\�b�h�ɗގ����Ă��܂����A������͂��̃��\�b�h���C���X�^���X�����݂̂��s���A�����ɏd�_���u����Ă��܂��B

class Hogehoge {
    void doit() {
         List list = new Vector();

         list.add(foo);
         ....
    }
}

���̂Ƃ��AVector���g�p���邩�ǂ������߂��Ȃ��ꍇ�A�������\�b�h�����ɂ��Ď����̓T�u�N���X�ōs���܂��B

abstract class Hogehoge {
    void doit() {
         List list = create();

         list.add(foo);
         ....
    }
    abstract List create();
}

class HogeAList extends Hogehoge {
    List create() {
        return new ArrayList();
    }
}

�ȉ��́AStrategy�AState�ACommand�́A�g����󋵂͈Ⴂ�܂����A�P�ɐ؂�ւ��N���X���헪�Ȃ̂��A��ԂȂ̂��A�R�}���h�Ȃ̂��̈Ⴂ�����ł��B����̓N���X�\����̃e�N�j�b�N�Ƃ������́A�����I�u�W�F�N�g�Ƃ��Ď��o�����Ƃ����w�j�ɉ߂��܂���B

Strategy

�헪�i�A���S���Y���j���N���X�����āA���s���ɂǂ̐헪���g������I�����āA�I�������N���X�̃��\�b�h���g���܂��B

State

��Ԃ��N���X�ɂ��ĉ��ʂ肩�̏�Ԃ̃N���X�̒��ŁA��Ԃɉ����Ď��s���郁�\�b�h��ς��܂��B

Command

�R�}���h�i�����A�̏�����v���j���I�u�W�F�N�g���āA�ǂ̏������g�������󋵂ɉ����Đ؂�ւ��܂��B

�O�̂Q�p�^�[�����Œ�I�ł���̂ɑ΂��A�R�}���h�p�^�[���̏ꍇ�́A�R�}���h�I�u�W�F�N�g�̈������y���A���N�G�X�g�Ƃ��đ���o������A�e�ՂɌ���������A�����^�񂾂�A���������s�������肵�܂��B�����̃R�}���h���L���[�ɓ���ď��X�ɌĂяo���悤�ɂ�����Aundo��redo�ɓK�p�����肵�܂��B

Bridge

�@�\�Ǝ����𕪗�����p�^�[���ł��B����͒ʏ�̃C���^�[�t�F�[�X�Ǝ����N���X�̕����̂��Ƃ������Ă���̂ł͂���܂���B�����Ō����u�����v�Ƃ́A�Ⴆ��Windows��UNIX�œ������������������������قȂ��Ă��܂��ꍇ��A���������ł��A���S���Y����؂�ւ������ꍇ�Ȃǂ��w���Ă��āA�������e�͓����ł��B����ɑ΂��āA�@�\�̕��́A�s�����������ꂼ��قȂ��Ă��܂��B

�ꌩ���ʂȃe�N�j�b�N�Ɍ����܂����A���ۂ̂Ƃ���A��������ޕ������āA�K�w�����Ă��邾���ł��B�ŏ��Ɏ��A�̒��̂ǂꂩ�̃N���X���Ăяo����A����������B�̒��̂ǂꂩ�̃N���X���Ăяo�����`�ɂȂ��Ă��܂��B�‚܂�|�����[�t�B�Y�����Q��s���Ă��邾���ł��B�������A��4�‚���A���B��3�‚������ꍇ�A�P��̃|�����[�t�B�Y�����g���ꍇ�A�e�N���X1 + �q�N���X4 �~ 3 �� 13�̃N���X���K�v�ɂȂ�܂����ABridge�p�^�[�����g���Ɛe�N���X2 �{ �q�N���X(4+3) = 9�ōς݁A�܂����ʂ����悭�Ȃ�܂��B

�ȉ��̂Q�‚̃p�^�[���͂��̃��\�b�h�̒��ł���ɑ��̃N���X�̃��\�b�h���Ăяo������A�ċA�Ăяo��������̂Ŏ኱���G�ł����A��{�I�ȃR���Z�v�g�̓N���X�Q�𓯂��C���^�[�t�F�[�X�ň������Ƃɂ���܂��B�|�����[�t�B�Y���Ǝ������g���Ăяo����@���~�b�N�X�������̂ł��B�N���X�\�����ċA�\���Ƃ��č�����ۂɁA�|�����[�t�B�Y����K�p���Č�������}�낤�Ƃ���p�^�[���ł��B

Composite

����́A�f�B���N�g���̍\���̂悤�ɁA�e��ƒ��g�𓯈ꎋ����p�^�[���ł��B�f�B���N�g���ɂ̓f�B���N�g�����t�@�C�����i�[�ł��A���ꂪ�ċA�I�ȍ\�����Ȃ��܂��B�����ł́A�e��ƒ��g�ɓ����C���^�[�t�F�[�X��񋟂ł���̂������ŁA�|�����[�t�B�Y���ɂ��؂�ւ����g���Ă��܂��B

�ċA�\���ł����Ă��A�e��ƒ��g�𓯈ꎋ���Ȃ��ꍇ�́AComposite�p�^�[���ł͂���܂���B�ċA�\�����̂́A�I�u�W�F�N�g�w���łȂ��Ă��p�����A���郁�\�b�h���������g���Ăяo���Ƃ����`�Ŏg���܂��B���̂Ƃ��e�킩���g���𔻒f������������g���Ă���̂ł����AComposite�p�^�[�����g�����ƂŁA���̏�������r�����A�|�����[�t�B�Y���ɂ���āA�e��ƒ��g�ɂ����s���e�̈Ⴂ���������܂��B

Interpreter

Interpreter�́A���炩�̃t�H�[�}�b�g�ŏ����ꂽ�t�@�C���̒��g����͂������ʂɓK�p����p�^�[���ł��B��͂�����@�ł͂Ȃ��A��͂������ʂ𗘗p����p�^�[���ł��B

���̃t�H�[�}�b�g�Ƃ́Ahtml��xml�A�v���p�e�B�t�@�C���̂悤�ȐÓI�Ȃ��̂�����΁A�\�[�X�t�@�C���̂悤�ɏ����菇���L�q�������̂�����܂��BSQL�A�V�F���A�o�b�`�A�}�N���AXSLT��������܂��B�ʏ�A�p�[�X�Ƃ�������ŁA���@�K���ɂ̂��Ƃ��ĉ�͂��s�Ȃ��A��͌��ʂ̓c���[�\���̃I�u�W�F�N�g�Ƃ��ĕۑ�����܂��B�S�͕̂�������\������A�����͂���ɏ����ȕ�������\������܂��B

�S�̂ɑ΂��ĉ��炩�̃��\�b�h��K�p����ƁA�����ɑ΂��Ă������ċA�I�ɓ������\�b�h���Ăяo���Ă����܂��B��{�I�ɁAInterpreter��Composite�Ɠ������̂ł��B

�����ʏ�AComposite��Interpreter��K�p����p�^�[���͑�������܂���B�ċA�I�ɏ�������̂��֗��Ȃ̂́A�����ɊK�w���[���Ȃ�”\��������ꍇ�ŁA�ꗗ�\����v�Z�⏈�����s���ꍇ�ł��B�e��̒��ɗe���������悤�ɂ���΁A�ċA�\�����ł�������܂����A�ݒ�t�@�C���Ȃǂŗp����ꍇ�͂������č����������܂��B�����ɊK�w���[���Ȃ��Ă��A���p����A�v���P�[�V�������őΉ�����K�v���o�Ă���̂ŁA�L���̍\���ɂ������������̂ł��B

�Ⴆ�΁Aconfig�t�@�C��������܂��B

config
property.1=aaa

category1 (
  property.2=zzz
  category2 (
   property.1=bbb
   property.2=123
  )
)

category3 (
 property.2=ccc
 property.3=456
)

������I�u�W�F�N�g�Ɏ�荞�ނɂ́A

class Config {
  Category[] category;
  Property[] property;
}

class Category {
  String name;
  Category[] category;
  Property[] property;
}

�Ƃ��������ŁA��ł���Category��Category���܂ނ悤�ɂ���Ζ����̊K�w���ł��܂��B���ꂪ�L���Ȃ̂́A�S�̂��邢�͈ꕔ���ň�A�̏������s���ꍇ�����ŁACategory�����邢��Property���ɉ����ď�����ς���ꍇ�́AComposite��Interpreter�p�^�[���̓K�p�͕��G�ɂȂ�܂��B�܂�����Ė����K�w������Ă��܂����͗L���̍\���ɂ��������ԈႢ�����Ȃ�����܂���B

�܂��ċA�\���̐�����������܂��B�t�@�C���V�X�e���Ȃǂ̏ꍇ�ōċA�I�ɏ�������̂́A���X�g�Ƃ��ăv�����g�A�E�g����ꍇ��t�@�C���T�C�Y�����v������A�R�s�[����Ȃǂ̗p�r�ł��B���������ꍇ�́A�p�^�[����K�p���Ē��g�Ɗ�𓯈ꎋ����̂������ł��傤�B

�܂��A��A�̌v�Z�⏈�����s���ꍇ�ł����A�Ⴆ�΁A

3 - 5 + 6 * 5 * (6 - 5)

�Ƃ����v�Z������ꍇ�A�܂��ȉ��̂悤�ȍ\���؂ɕ����i�p�[�X�j���܂��B-�͒l�Ɋ܂߁A�m�[�h�́{��~�̃I�y���[�^�ƒl�ł���I�y�����h����Ȃ�܂��B

�I�y���[�^�͊֐��Ɠ���ɂ݂Ȃ��āA���ɂԂ牺�����Ă���m�[�h�������Ƃ��Č����Ă܂��B�{��~�͉•ψ����ł��B�����̐������肳�ꂽ��������ݏ�Ȃǂ̊֐�������Ă��悢�ł��傤�B

�S�̂̌v�Z������ɂ́A���[�g�m�[�h�ɃA�N�Z�X���A�m�[�h���I�y���[�^�ł���ꍇ�́A�q�m�[�h��ǂݍ���Ōv�Z���s���܂��B�q�m�[�h���I�y���[�^�̏ꍇ�͂���ɂ��̎q�m�[�h�ɑ΂��ē������Ƃ����܂��B�I�y�����h�̏ꍇ�͒P�ɒl��Ԃ��܂��B�������Ė��[�܂Ōv�Z�������킽�邱�ƂɂȂ�܂��B

���̂悤�ȏ����́A�r�p�k�������s����ꍇ�ł����l�ł��傤�B

���������ꍇ�́AInterpreter���g���āA���ׂẴm�[�h�ɑ΂���getValue()���\�b�h����������̂��悢�ł��傤�B

interface Node {
  abstract int getValue();
}

class PlusOperand implements Node {
  Node[] node;
  int getValue() {
    int value = 0;
    for (int i=0;i < node.length;i++) {
      value += node[i].getValue();
    }
    return value;
  }
}

class Operand implements Node {
  int value;
  int getValue() {
    return value;
  }
}

�Ȃ��AInterpreter�̓p�[�X�̂Ƃ��Ɏg����p�^�[���ł͂Ȃ��̂ŁA�e�L�X�g����\���؂����p�[�X��Ƃ͕ʓr�s���K�v������܂��B

�ȏ�A�����‚��̃p�^�[����񋓂��Ă��܂������A���ۂɓK�p�����ŕK�v�Ȓm���́A�|�����[�t�B�Y�����g���A�Ƃ����������ꂾ���̂��Ƃł��B�����؂�ւ��̑ΏۂɂȂ邩�́A���̏󋵏󋵂ɂ���Ĉ���Ă��܂��B

���̂ق��̃p�^�[���ł��|�����[�t�B�Y���ɂ��؂�ւ�����b�ɂ��Ă���p�^�[���͑�������܂����A�����ɋ������̂͂��ꂪ�v�̂��̂ł��B

Chain of Responsibility

���̃p�^�[�����T�u�N���X�ɂ�鏈���̐؂�ւ��ł����A�������邩�ǂ������T�u�N���X���g�ɔ��f�����Ă���Ƃ���ƁA�����̃T�u�N���X�ɑ΂��ď��ɏ������˗����Ă���Ƃ��낪�A����܂ł̂��̂ƈقȂ��Ă��܂��B

��|�����[�t�B�b�N�ȏ�����������΁A�g�p����T�u�N���X�̐؂�ւ��͈ȉ��̂悤��if-else����switch�������g���čs���܂��B

Handler hdr;

switch (cnt) {
case 0:
    hdr = new AbcHandler();
case 2:
    hdr = new XyzHandler();
default:
    hdr = new DefHandler();
}

hdr.handle();

�|�����[�t�B�Y���̕��@���炷��΁Aswitch���͔r���ł���͂��ł����A�ȑO�c�_�����Ƃ����A�ǂ����Œ��ڎw�肷�邩�Aif����switch���ŏ������肷��K�v������܂��B

Chain Of Responsibility�ł́A���̏���������T�u�N���X���ɂ����A��L��switch���Ŏ��グ�Ă���N���X�ɏ��ɓn���Ă����܂��B

class AbcHandler extends Handler {
    boolean handle(int cnt) {
        if (cnt != 0) {
            return false;
        }
        else {
            ... ���� ...
            return true;
        }
    }
}

�����āA�����ł��Ȃ���Ύ��̃T�u�N���X�ɉ񂵂Ă����܂��B�����čŏ��ɏ����ɍ��v�����N���X���������s���A���Ƃ̃N���X�ɂ͉񂳂�܂���B�����̗D�揇�ʂ����߂�A�����X�g�͌Ăяo�����Ŏw�肷��K�v������܂��B

��������ɑ΂��鏈�����P�΂P�Ō��܂��Ă���ꍇ�A���炢�񂵂ɂ��Ă��镪�A�Ăяo���̃I�[�o�[�w�b�h������܂��B

�ʃo���G�[�V�����Ƃ��āA�Ō�Ƀf�t�H���g�������Ă��ĕK�����炩�̏�����������p�^�[���⍇�v���镡���̏������ׂĂ̏������”\�ɂ���p�^�[��������܂��B

Handler�̐e�N���X����ю��ۂ̏����̃T�u�N���X�͕ύX����K�v���Ȃ��A�ʂ̏������K�v�ɂȂ�΃T�u�N���X��lj�����΂悢�_�����̃p�^�[���̓����ł��B

����ɃJ�X�^�}�C�Y���āA�A�����X�g���O���t�@�C���ɋL�q���ēǂݍ��ނ悤�ɂ���΁A�Ăяo�������ύX���Ȃ��Ă悭�Ȃ�ł��傤�B

���j�[�N�ȕ��@�ł͂���܂����A���炢�񂵂ɂ��Ă��镪�̃I�[�o�[�w�b�h����A���܂�g���Ă��܂���BJava��Awt�̃N���X�ňȑO�g���Ă������炢�ł��B

����̃p�^�[��

���̒��ɂ͒���l�Ƃ������̂����܂��B�l����l�ɗv�����o���ۂɒ��ڏo�����ɒ���l����čs���̂ł��B����́A����l�����̕���ɂ‚��Ď������悭�������Ă��邩��ł���A�܂��ώG�ȃv���Z�X�����ɂ���Ă���邩��ł���A�܂������ɒ��ڎd�������Ă����l�Ƃ̃R�l�N�V�������Ȃ�����ł��B

�܂��A����l�́A�d�����󂯎��‘��ɂƂ��Ă��𗧂‚��̂ł��B���������ڗv�����󂯂����ɁA��������v�����󂯂ĕK�v�Ȃ��Ƃ����������ɓ`���Ă����̂ŁA�����͎����̎d���ɐ�O�ł���̂ł��B

�N���X�\���ɂ‚��Ă��S���������Ƃ������܂��B�N���X�ƃN���X�̊Ԃɗ����āA������s���܂��B�Ăяo�����̃N���X�́A��A�̌��܂肫�����������������g�ł͍s�킸�ɁA���̃I�u�W�F�N�g�Ɉ˗����čs���܂��B�s�����������𒼐ڌĂяo�����ɊԂɂ��܂����Ƃ��|�C���g�ł��B�����Ŏ��グ�邢����̃p�^�[�����Ԃɓ����āA������s���܂��B

�������A����N���X������ǂ����Ƃ����̂́A���N���X�Ƃ̑��ΓI�Ȋ֌W�ɉ߂��܂���B�Ăяo�����̃N���X����A����̐�̃N���X�������Ȃ���΁A���̒���̃N���X����̓I�ȏ������s���Ă���悤�Ɍ����܂��B���ہA�����Ɍ���΁A�قƂ�ǂ̃N���X�͒�����s���Ă��邾���ł��B

�����̃N���X�́A����Manager�Ɩ��Â����邱�Ƃ�����܂��B

Abstract Factory

�C���X�^���X�����̂Ƃ���́AFactory�p�^�[���Ɠ����ł��B����Factory Method�ƈႢ�AFactory�N���X�͐����݂̂���Ɏ󂯎����A���g�ł͏�Ԃ������܂���B�ǂ�Ŏ��̔@���AFactory Method��new�������ɐ������\�b�h��lj����邱�Ƃł���AAbstract Factory�͒��ۓI�ȑ��݁i�����g�̎��̂������Ȃ��j���Ӗ����Ă��܂��B

���̂悤�Ȑ�������ɂ‚����ǂ郁�\�b�h������̂́A�����̃C���X�^���X�̑g�𐶐����邽�߂ł��B�P��̃N���X�̃C���X�^���X�𐶐�����Ȃ炻�̃N���X��create���\�b�h����邩�A���邢�͒P��new���s���΂��������ł��BFactory Method�̂悤�ɐ������\�b�h�������Ă��邱�Ƃ��d�v�Ȃ̂ł͂Ȃ��A��������C���X�^���X�̑g�������Ă��邱�Ƃ��|�C���g�Ȃ̂ł��B

�����Ă��̂悤��Factory�N���X�𕡐�����āA�󋵂ɉ����Đ��������C���X�^���X�̑g��؂�ւ��܂��B

�܂��A�����Ɏ�Ԃ���������̂����ɐ������Ă�����̂�Abstract Factory�ł͂���܂���B����͎��ɏq�ׂ�Builder�p�^�[���ł��B

Builder

Abstract Factory�������ɃC���X�^���X�𐶐�����̂ɑ΂��ABuilder�͒i�K�𓥂�ŃC���X�^���X�����グ�Ă����܂��B�Ƃ����Ă��Anew�͂P�񂾂��ŁA���̑O��ɐ�������I�u�W�F�N�g�ɑ΂��āA���낢��ƕt�������Ă����܂��B

Builder�p�^�[���ł́ABuilder�����ł͂Ȃ��ADirector�N���X���ꏏ�ɓo�ꂵ�܂��B���ۂɃI�u�W�F�N�g�𐶐�����̂�Builder�ł����ADirector��Builder�̈�A�̃��\�b�h���Ăяo���āA�I�u�W�F�N�g�𐶐����Ă����܂��BBuilder�őg�ݗ��Ă���N���X�́ADirector�̌Ăԏ����ŃI�u�W�F�N�g���g�ݗ��Ă���悤�ɂ���K�v������܂��BBuilder�̓I�u�W�F�N�g�����E�ύX�̊�{�I�ȃ��\�b�h��񋟂��ADirector���������g���đg�ݗ��Ă܂��B

�‚܂�ABuilder�p�^�[���́A�����菇���O�o���ɂ��邱�ƁA�R���X�g���N�^���O�o���ɂ���Ƃ������Ƃł��B�����ŁA���ށE�����̌������p�����Ă��܂��B�P�N���X�őS�����Ă��܂��̂ł͕��G������ꍇ�A�����菇�͕������Ă��܂��̂ł��B�������邱�ƂŁA�\�����V���v���ɂȂ�A�ė��p�������܂�܂��B

Builder�͍\���I�ȃI�u�W�F�N�g�̑g�ݗ��Ă����ł͂Ȃ��A�t�@�C���╡�G�ȕ�����̑g�ݗ��ĂɎg�p����邱�Ƃ�����܂��B

�N���X���Ƃ��āA����Maker�Ɩ��Â����邱�Ƃ�����܂��B

Facade

���̃p�^�[���́A

�P. ��������N���X�̌Ăяo�����X�ɍs���̂ł͂Ȃ��A����ɂP�‚̃N���X����\���āA�O���ɂP�‚̃C���^�[�t�F�[�X��񋟂��܂��B

�Q�D�����̃N���X��g�ݍ��킹�čs����A�̏������A�����Ă܂Ƃ߂čs���܂��BAbstract Factory��Builder��������㗝����̂ɑ΂��āAFacade�͏�����㗝���܂��B

����́A��A�̃N���X�Q�i�����Ă�jar�Ńp�b�P�[�W�������j�ւ̃A�N�Z�X����‚ɂ���ꍇ�Ȃǂɗp�����܂��B��������‚ɂ��邱�Ƃɂ��A�N�Z�X��e�Ղɂ��܂��B

����́A�p�^�[���Ƃ����΃p�^�[���ł����A������x�̋K�͂ɂȂ�΂���ł��g�����̂ł��B������A����Manager�Ɩ��Â���ꂽ�肵�܂��B

�܂��A�t���[�����[�N�ŗp������R���g���[���[���A�N���C�A���g���猩��Α����ɂȂ邽�߁AFacade�Ƃ����Ă悢�ł��傤�B

Mediator

���̃p�^�[���́A��‚̃I�u�W�F�N�g���瑼�̃I�u�W�F�N�g�ւ̃��b�Z�[�W�𒇉�܂��B�ʒm���鑤�Ƃ���鑤�ɂ킩��Ă���̂ł͂Ȃ��AMediator������I�u�W�F�N�g�Q�̊Ԃōs����ʐM�𒇉��̂ł��B

Observer�p�^�[���ł́AObserver���̂��������󂯎��‚̂ɑ΂��āAMediator�̓��b�Z�[�W�ʐM�̒�����s�������ł��BObserver�p�^�[���ł́A��‚̃I�u�W�F�N�g�̕ω��𕡐��̃I�u�W�F�N�g�ɒʒm����̂ɑ΂��AMediator�p�^�[���ł͕����̃I�u�W�F�N�g�̕ω����P�‚̃I�u�W�F�N�g�ւ�������W�񂳂�āA�K�X���̃I�u�W�F�N�g�ɒʒm����܂��B

Facade���A�Ăяo�����̃C���^�[�t�F�[�X�ł����t�W�ł���̂ɑ΂��AMediator�͗����ŏ����W�񂵂Ďw�����o���������ł��B

Wrapper�i��ށj

�ΏۂƂȂ�I�u�W�F�N�g�ɒ��ڃA�N�Z�X�����Ȃ��ŁAWrapper�ŕ�ݍ���ŁAWrapper�o�R�ŃA�N�Z�X������p�^�[���ł��B����̈��ł����A�P�I�u�W�F�N�g���ݍ���ł��邽�ߕʃJ�e�S���[�ɂ��܂����B

����́A���̃I�u�W�F�N�g�ɑ΂���A�N�Z�X�𐧌�����ꍇ��A�@�\��t����������A���邢�͒��ڃA�N�Z�X�ł��Ȃ����߂ɊԂɓ����čs���ꍇ������܂��B

Adapter

���O�̂Ƃ���A��‚̃I�u�W�F�N�g�Ԃ̒ʐM�̊Ԃɓ����āA�C���^�[�t�F�[�X�����킹��p�^�[���ł��B

�K�p���@�Ƃ��Ĉȉ��̂R�‚�����܂��B

1. �C���^�[�t�F�[�X�ϊ�

�Ⴆ�΁A���ۂɎg�p����N���X�̃��\�b�h��getAdp()�ŁA�Ăяo�����ł�getA()�Ƃ��ČĂяo���Ȃ���΂Ȃ�Ȃ��ꍇ�AAdapter���Ԃɓ����āAgetA()�Ŏ󂯂āAgetAdp()���Ăяo���Ă����܂��B

2. �C���^�[�t�F�[�X�⊮

�e�N���X�������̓C���^�[�t�F�[�X���p������ꍇ�A���̑S���ۃ��\�b�h���������Ȃ���΂Ȃ�܂���B���̂Ƃ��A�e�q�֌W�̊Ԃɓ����đS���ۃ��\�b�h�̃f�t�H���g���\�b�h���������A���̃N���X�ł͕K�v�ȃ��\�b�h������������΂����悤�ɂ��܂��BJava�̃C�x���g�֌W�̃N���X�ŁAListener��implement���ċ�̃��\�b�h����������Adapter�N���X������ɊY�����܂��B

3. protected���\�b�h���g�p�”\�ɂ���B

�ΏۃI�u�W�F�N�g��public���\�b�h���Ȃ����߂ɁA�ΏۃI�u�W�F�N�g���p�����ăT�u�N���X����A�N�Z�X���āApublic���\�b�h��񋟂��܂��B

public class A {
    protected void exec() {
        ... ���� ...
    }
}

public class B extends A {
    public void execA() {
        super.exec();
    }
}

Proxy

�Ԃɋ���ŁAProxy�T�[�o���l�A�ΏۃI�u�W�F�N�g�̌Ăяo���̃^�C�~���O��ς�����A�L���b�V����Ԃ����肵�āA�ΏۃI�u�W�F�N�g�̑���̏����������肵�܂��B�Ăяo������Proxy�ł��邱�Ƃ��ӎ����܂���B

Decorator

���̃p�^�[���͊����̃N���X�ɋ@�\��lj�����p�^�[���ł��B�����́A�Ϗ��ƌp�����g���Ă���_�ŁAWrap����I�u�W�F�N�g�������o�[�Ɏ����A���‚��̃I�u�W�F�N�g�Ɠ����C���^�[�t�F�[�X���������Ă��܂��B

�O������͓������\�b�h�ŃA�N�Z�X����A���g�̊g�����������āAWrap�����I�u�W�F�N�g���Ăяo���܂��BWrap�ΏۃI�u�W�F�N�g�́A�����C���^�[�t�F�[�X���������Ă�����̂ł���Ή��ł��\���܂���B�܂����̃I�u�W�F�N�g���g�������C���^�[�t�F�[�X���������Ă��邽�߂ɁADecorate�����ΏۂɂȂ�܂��B

��j�wJava����Ŋw�ԃf�U�C���p�^�[������x���

public abstract class Border extends Display {
    protected Display display;
    protected Border(Display display) {
        this.display = display;
    }
    public String getRowText(int row) {
        return borderChar + display.getRowText(row) + borderChar;
    }
}

���@�\�̊g���ɂ‚��ā`

�����̃N���X�̊g���ɂ́A�p���ƈϏ����g���܂��B

�E�p��

�I�u�W�F�N�g�w���̑�񌴑����g���܂��B�������e�N���X�̃��\�b�h���g���ꍇ�A������̐e�N���X�̃��\�b�h�����g���܂���B

�E�Ϗ�

�N���X���p�������A���̃N���X�̎Q�Ƃ������o�[�ɕێ����Ă����āA�K�v������΁A���̃N���X�̃��\�b�h���Ăяo���܂��B�e�N���X��C���^�[�t�F�[�X�������o�[�Ɏ������ꍇ�A�|�����[�t�B�Y���ɂ���ē��I�ɌĂяo����郁�\�b�h���ς��܂��i�p���̏ꍇ�́A�ÓI�ŁA���s�ł��郁�\�b�h�͈��̃N���X�ɌŒ肳��Ă��܂��j�B���������̃N���X�̃��\�b�h��protected�̏ꍇ�́A�p���łȂ��Ǝg���܂���B�܂��p���̏ꍇ�e�N���X�̃��\�b�h�̋L�q�͕s�v�ł����A�Ϗ��ł͓����V�O�l�`���[�̃��\�b�h�������A�Ϗ�����I�u�W�F�N�g�̃��\�b�h���Ăяo���K�v������܂��B

Java�ł͑��d�p�����g���Ȃ��̂ŁA�Ϗ���p����΁A�����̃N���X�̋@�\�����‚��Ƃ��ł��܂��B���̂��ߍŋ߂̃I�u�W�F�N�g�w���v���O���~���O�ł͌p�������Ϗ����E�߂��Ă��܂��B�N���X�̑��d�p���͂ł��܂��񂪁A�C���^�[�t�F�[�X�̑��d�p���Ȃ�ł��܂��B

�p���������闝�R�́A�����I�Ȑ�������A�\���̗����̂��₷���̖��ɋN�����Ă��܂��B����N���X�̃��\�b�h�������‚��g����������Ƃ������R�Ōp������ƁA�Ӗ��I�ɂ܂������ʂ̌n���}���ł��Ă��܂����ƂɂȂ�܂��B�����������ƂŁA�ʂ̃N���X�̃��\�b�h���g����������Ƃ����Ă����d�p���͂ł��Ȃ��̂Ōp���͂ł��Ȃ��Ȃ�܂��B�ނ��낻�̃N���X�̕����Ӗ��I�ɂ͎q�ǂ��ł������Ƃ��Ă��ł��B����̓N���X�݌v�}�������Ƃ��ɔ��ɂ킩��Â炢���̂ɂȂ�܂��B�Ȃ̂ňӖ��I�ɓ��n���Ŋg�����Ă���Ƃ����̂ł͂Ȃ�����A�p���͂��Ȃ����������̂ł��B

Memento

���鎞�_�E�����Ԃ̃C���X�^���X��ۑ����Ă������߂ɁA�ۑ���p�̃I�u�W�F�N�g��p�ӂ���p�^�[���ł��B�ۑ�����̂́A�ΏۂƂȂ�C���X�^���X�̒�����K�v�Ȉꕔ�̒l�����ō\���܂���B�������邱�ƂŁA�C���X�^���X�̗�����ۑ����A�K�v�ł���Ό��̏�Ԃɖ߂����Ƃ��ł��܂��B

���ɋZ�I�I�Ȃ��͉̂�������܂��񂪁A�K�p����Ƃ��ɏd�v�Ȃ̂͂����̃C���X�^���X��ۑ�����ہA������̎Q�Ƃ��Ȃ��悤�ɂ��邱�Ƃł��B�łȂ��ƁA�ۑ������I�u�W�F�N�g������ɏ����������Ă��܂��”\��������܂��B�N���[��������ĕۑ�����Ƃ����̂�������������܂���B

�@�\���U

�����ɕ��ނ����p�^�[���́A�����𕪊����邱�Ƃł��B�f�[�^��ێ�����N���X�ƁA���̃f�[�^�ւ̑���𕪗����܂��B

�{���A�I�u�W�F�N�g�w���ł́A���̃I�u�W�F�N�g�Ɋւ��鏈���́A�I�u�W�F�N�g���̂������Ă���i���J�v�Z�����j�͂��ł����A����ł̓I�u�W�F�N�g����剻���Ă��܂��̂ŁA�֘A���鏈�����O�ɏo���܂��B

���ہA�I�u�W�F�N�g�Ɋ֌W���鏈���A���ׂē����I�u�W�F�N�g�����ɍ��͕̂s�K�؂ȏꍇ������܂��B�����̃I�u�W�F�N�g�Ԃŗގ���������������ꍇ�A���ꂼ��̃I�u�W�F�N�g���ɏ��������������A�ʂ̃I�u�W�F�N�g�Ɏ������������ėp���������Ă����̂ł��B�����ƃf�[�^����̉����Ă���ꍇ�́A���̃I�u�W�F�N�g�ɂ����g���Ȃ����߁A�ėp��������܂���B�ǂ̋@�\���O�o���ɂ��邩�͓�����ŁA�𓚂͈�‚ł͂���܂���B

�܂��f�[�^�ւ̑����ʃN���X�ɂ���ƁA���삷��I�u�W�F�N�g�ɓ����̃f�[�^�\�������J����K�v���o�Ă��āA�J�v�Z�����̌������j���Ă��܂��”\��������܂��i�Ƃ����Ă��Apublic�����g���Ă��Ȃ���Ί֘A�̂Ȃ����̃I�u�W�F�N�g�ɑ΂��Ă��������Ƃł����j�B

���ہA�A�v���P�[�V�����̒��ŁA�e�I�u�W�F�N�g�̓J�v�Z�����ŒP�̂œƗ����Ă���̂ł͂Ȃ��A�ʏ핡���̃I�u�W�F�N�g���֘A���Ĉ�‚̋@�\��񋟂��Ă��܂��B����ɍו��ɕ�������ƈ�‚̃I�u�W�F�N�g���Ɨ����Ĉ�‚̋@�\��񋟂��Ă��܂��B���������Ăǂ��܂ł��‚��Ă��Ăǂ��܂ł��J���Ă��邩�ӎ����Ȃ���΂Ȃ�Ȃ��ł��傤�B

�����āA���̈�‚̋@�\��񋟂��Ă���I�u�W�F�N�g���W�܂��āA���̃I�u�W�F�N�g�ɑ΂��Ĉ�A�̋@�\��񋟂��܂��B�����̃N���X��jar�t�@�C���Ƃ��Ĉ�‚ɂ܂Ƃ߂���ꍇ�������̂ł��B����ɁA�����jar�t�@�C����g�ݍ��킹�āA��‚̃V�X�e����񋟂��邱�ƂɂȂ�܂��B

Iterator

����́A�����o�[�ϐ��ւ̃A�N�Z�X���A�O���N���X�Ɉϑ�����p�^�[���ł��B

���̏ꍇ�A�����o�[�ϐ��͏W���\���������Ă��āA���̏W���̗v�f�ւ̃A�N�Z�X��Iterator��p���ď����A�N�Z�X�����܂��B

�����_���A�N�Z�X�̏ꍇ�́A�T�C�Y��Ԃ����\�b�h��w��ʒu�̃��\�b�h���K�v�ɂȂ�܂����A����͂��̃N���X���̂������Ă���΂悢�̂ł��B�������A�����A�N�Z�X�̏ꍇ�́A���݂̃J�[�\���ʒu��ێ�����K�v������̂ŊO���N���X�Ɏ�������̂��悢�̂ł��B���ꂪIterator�p�^�[���ł��B����Iterator��_����ɂ́A�W���N���X�ɑ΂���A�����A�N�Z�X�ƃ����_���A�N�Z�X�Ƃ������_���K�v�ł��B�܂�Iterator�́A�S�̂̃T�C�Y���c���ł��Ȃ��X�g���[����A�ꊇ�Ńf�[�^��Ԃ��Ă���̂ł͂Ȃ������Ԃ��Ă���f�[�^�ɑ΂��ėL���ł��B

Observer

����I�u�W�F�N�g�̏�Ԃ��ω������Ƃ��ɁA���̕ω��ɉ����������𑼂̃I�u�W�F�N�g�ɈϔC���܂��B��Ԃ̕ω���ʒm�Ώۂ́A�����o�^�”\�ł��B�ʒm���󂯂�Observer�N���X�́A���̃I�u�W�F�N�g�̏�Ԃɉ����ď������s���܂��B

�������āA�I�u�W�F�N�g�ƁA���̃I�u�W�F�N�g�Ɋ֌W���鏈���𕪗�����̂ł��B

�ʖ��FListener�AHandler

Visitor

����́A����I�u�W�F�N�g�ɑ΂��鏈����ʂ̃I�u�W�F�N�g�Ɉς˂�p�^�[���ł��B���̍ہA����̃I�u�W�F�N�g�ɁAthis�L�[���[�h���g���āA�������g�����ׂĈ����n���Ă��܂��܂��B�����āA����̃I�u�W�F�N�g�́A�����̃��\�b�h���Ăяo���ď������s���܂��B����́A�f�[�^�\�������ƒI�u�W�F�N�g�Ƃ��̏���������I�u�W�F�N�g�Ƃ𕪗����邱�Ƃ�ړI�Ƃ��Ă��܂��B�������邱�ƂŃf�[�^�\�������ƒI�u�W�F�N�g���V���v���ɕۂ��A���̃f�[�^�\���ɑ΂��鏈�����O�o���ɂ��āA������lj����₷������̂ł��B

��̓I�ɂ́A����I�u�W�F�N�g��accept()���\�b�h��Visitor��n���A����accept()�̒���Visitor��visit()���ĂԂ��ƁiVisitor�������A�K�₳����j�ŏ�������܂��B

���ۂ̏����́Avisit()�ɏ�����Ă��邽�߁A�ʂ�accpet���\�b�h����Ă΂Ȃ��Ă��Avisit()���\�b�h�̈����ɂ��̃I�u�W�F�N�g��n���΍ςނ��Ƃł��B����accept()���\�b�h�̂Ȃ��p�^�[���́A�ʂ�Visitor�p�^�[���łȂ��Ă��p�ɂɗp�����邱�Ƃł��B�Ƃ����̂́A���郁�\�b�h�̈����ɃI�u�W�F�N�g��n���A���̃��\�b�h���I�u�W�F�N�g�ɑ΂��Ă��낢��ȑ��������Ƃ����̂͂悭���邱�Ƃ�����ł��B

�������AVisitor�p�^�[���ł́A�ΏۃI�u�W�F�N�g����AVisitor���Ăяo���܂��B���̃I�u�W�F�N�g�̈�A�̏����̒��ɁA�ʂ̏�����lj��������ꍇ�Ɏg���̂ł��B

Visitor�́A�ΏۃI�u�W�F�N�g����̓I�ɒm���Ă��Ă��m��Ȃ��Ă��\���܂���B���̗�̂悤�ɁA�����C���^�[�t�F�[�X���������Ă���A�N���X�Q���������ۂɁA�����ɋ��ʂƂȂ�visit()���\�b�h�����s���Ă������ł����A��̓I�ȃI�u�W�F�N�g�ɉ�����visit()���\�b�h���������Ă������ł��B

�܂��AComposite�p�^�[���Ƌ��ɗp������ꍇ��Visitor�͋�̓I�ȃI�u�W�F�N�g�̂��Ƃ�m���Ă��āA���ꂼ��ɉ�����visit()���\�b�h���������܂��B�܂�����visit()���\�b�h�͑ΏۃI�u�W�F�N�g����ĂԕK�v������܂��BVisitor�ɂ����āA�V���Ɏ��o�����m�[�h�ɑ΂��ď������s���ہAif���ŕ��򂳂����ɁA�|�����[�t�B�Y�����g���đΏۃI�u�W�F�N�g��accept()���\�b�h�����s���Ĕ��肳����̂ł��B�����Ėʔ������Ƃɂǂ̃m�[�h��accept()���\�b�h������visitor.visit(this);���������Ă���̂ł��B�������ł���Ȃ���Ă΂�郁�\�b�h�͈Ⴂ�܂��B����̓I�[�o�[���C�h�ł͂Ȃ��I�[�o�[���[�h�i���\�b�h�̃V�O�l�`���̈Ⴂ�j�ł��B

�������Ĉꌩ��ȃI�u�W�F�N�g�Ԃ̍s���������܂�܂��B����͍ċA�\���ɑ΂��ēK�p�������߂ɂ����Ȃ�̂ł����Ēʏ�͈��s����������܂��B

Composite�����Visitor��accept()���\�b�h����Ȃ��̔�r�i�wJava����Ŋw�ԃf�U�C���p�^�[������x���ꕔ���p�j

Composite�p�^�[���̂ݏꍇ�@�\�\Visitor�Ȃ���Entry���g���������s��

public class File extends Entry {
    // ... ���� ...
    protected void printList(String prefix) {
        System.out.println(prefix + "/" + this);
    }
}

public class Directory extends Entry {
    // ... ���� ...
    protected void printList(String prefix) {
        System.out.println(prefix + "/" + this);
        Iterator it = directory.iterator();
        while (it.hasNext()) {
            Entry entry = (Entry)it.next();
            entry.printList(prefix + "/" + name); //�|�����[�t�B�Y��
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Directory rootdir = new Directory("root");
        // ... ���� ...
        rootdir.printList();
    }
}

accept()�Ȃ��̏ꍇ�@�\�\Visitor��Entry�̏������s��

public class ListVisitor extends Visitor {
    private String currentdir = "";
    public void visit(File file) {
        System.out.println(currentdir + "/" + file);
    }
    public void visit(Directory directory) {
        System.out.println(currentdir + "/" + directory);
        String savedir = currentdir;
        currentdir = currentdir + "/" + directory.getName();
        Iterator it = directory.iterator();
        while (it.hasNext()) {
            Entry entry = (Entry)it.next();
            if (entry instanceof File) { //��|�����[�t�B�Y��
                visit((File)entry);
            }
            else if (entry instanceof Directory) {
                visit((Directory)entry);
            }
        }
        currentdir = savedir;
    }
}

public class Main {
    public static void main(String[] args) {
        Directory rootdir = new Directory("root");
        // ... ���� ...
        ListVisitor lv = new ListVisitor();
        lv.visit(rootdir);
    }
}


accept()����̏ꍇ�\�\Entry��Visitor��K�₳����

public class ListVisitor extends Visitor {
    private String currentdir = "";
    public void visit(File file) {
        System.out.println(currentdir + "/" + file);
    }
    public void visit(Directory directory) {
        System.out.println(currentdir + "/" + directory);
        String savedir = currentdir;
        currentdir = currentdir + "/" + directory.getName();
        Iterator it = directory.iterator();
        while (it.hasNext()) {
            Entry entry = (Entry)it.next();
            entry.accept(this); // �|�����[�t�B�Y��
        }
        currentdir = savedir;
    }
}

public class Directory extends Entry {
    // ... ���� ...
    public void accept(Visitor v) {
        v.visit(this);
    }
}

public class Main {
    public static void main(String[] args) {
        Directory rootdir = new Directory("root");
        // ... ���� ...
        rootdir.accept(new ListVisitor());
    }
}

�܂�����Visitor�p�^�[���ł̓_�u���f�B�X�p�b�`���p�����Ă��܂��B

http://java-house.jp/ml/archive/j-h-b/014912.html�Q��

�����Aobj1, obj2, arg1, arg2 �ŏ�������郁�\�b�h�i��‚̃I�u�W�F�N�g������ł����i�K�ŌĂ΂�郁�\�b�h�����肳���j��

1. obj1.do(obj2, arg1, arg2)

2. obj2.do(obj1, arg1, arg2)

�̂ǂ���Ŏ������邩�Ƃ����̂́A���΂��ΔY�܂������ł��B(obj1, obj2).do(arg1, arg2)�̂悤�ȃ_�u���f�B�X�p�b�`�́Ajava�ł͎g���Ȃ��̂ŁAVisitor�p�^�[���̂悤�ɂȂ�܂��B

�܂��ȉ��̃y�[�W��Visitor�p�^�[���ɂ‚��āA��̓I�ȃ\�[�X�������Đ[���˂�����ł��܂��̂ŎQ�Ƃ��������Baccept()���\�b�h�Ȃ��Ŕ�|�����t�B�b�N��instanceof���g��Ȃ��������f�ڂ���Ă��܂��B

http://www.ncfreak.com/asato/doc/patterns/visitor.html

�C���X�^���X���L

��x�쐬�����C���X�^���X���g���܂킷�p�^�[���ł��B

Singleton

����́A�P�‚̃C���X�^���X���g���܂킷�p�^�[���ł��B����̓C���X�^���X�����������Ă͍���ꍇ�A���邢�͈�‚Ŏ������ꍇ�Ɏg���܂��B�����̃C���X�^���X�����̂̓������Ǝ��Ԃ̖��ʌ����ł��B

�ʂ�Singleton���g��Ȃ��Ă��Aprivate��static�ȃN���X�ϐ��ō\�����ꂽ�N���X���g���΂P�‚ł��邱�Ƃ��ۏ؂���܂����Astatic���g���̂̓I�u�W�F�N�g�w���I�ł͂Ȃ��̂ŁASingleton���g���܂��Bstatic�ɂ����ꍇ��Singleton�̑Δ�ɂ‚��Ĉȉ��̃y�[�W���Q�l�ɂȂ�܂�

http://www.freeml.com/message/[email protected]/0001069

�ʂ̃o���G�[�V�����Ƃ��āA�C���X�^���X�̐������肵�Ďg���܂킷�p�^�[��������܂��B����̓R�l�N�V�����v�[�����O�ȂǂɎg���܂��B�C���X�^���X�̃v�[���ɂ́A�z���Stack���p�����܂��B

��ʂɏЉ��Ă���Singleton�ɂ͎��͖�肪����A�����ɕʃX���b�h����擾���\�b�h�ɃA�N�Z�X�����ꍇ�A�C���X�^���X�������邱�ƂɂȂ�܂��B�����h�����߂ɁAsynchronized���w�肵�Ĕr����������ăC���X�^���X����‚����ɂȂ�悤�ɕۏ؂��܂��B�Ƃ��낪��������Ɣr������̂��ߐ��\�ɉe�����o�܂��B�����ōl���o���ꂽ�̂�double-checked locking�p�^�[���ł��B����͓������K�v�ȉӏ������肵�āA��x�C���X�^���X�̑��݂��`�F�b�N���邱�Ƃ��疼�Â����܂����B����������ɂ‚��Ă���肪���邱�Ƃ��w�E����Ă��܂��B

dW Java technology double-checked locking��Singleton�p�^�[��

�����Ȃ��static�t�B�[���h���悢�Ƃ������_�ɂȂ��Ă��܂��悤�ł��B

FlyWeight

����́A�����̎�ނ̃C���X�^���X���g���܂킷�p�^�[���ł��B�����Singleton�ƈႢ�A������ނ̃C���X�^���X���������邪�A���ꂼ�ꂪ�g���񂵂������ꍇ�Ɏg���܂��B

���͂悭���̃p�^�[�����A�f�[�^�x�[�X������������Ă����}�X�^�[�f�[�^���L���b�V������ꍇ�Ɏg���܂��B���ID�Ȃǂ��L�[�ɂ��āA��Ə����i�[�����I�u�W�F�N�g��Map�ɃL���b�V�����āA�g���܂킷�A�v���[�`�����܂��B

Prototype

�C���X�^���X�̃R�s�[���쐬����p�^�[���ł��B�g���܂킷�p�^�[���ł͂Ȃ��A�R�s�[��n���p�^�[���Ȃ̂Ń������͐ߖ�ł��܂��񂪁A�����̃R�X�g��ߖ�ł��܂��BFlyWeight���I�u�W�F�N�g�����L���邱�Ƃ�ړI�Ƃ��ē����C���X�^���X�ւ̎Q�Ƃ�Ԃ��̂ɑ΂��āAPrototype�ł̓R�s�[��n���܂��B

�\���I�ɂ́Ajava�ł�clone()�Ƃ������\�b�h�����łɂ���̂ŁA�ʒi���������̂ł͂���܂��񂪁Adeep�R�s�[��shallow�R�s�[�̈Ⴂ�ɂ͋C���‚������������ł��傤�B

�܂�����Prototype�p�^�[���̔w�i�ɂ���̂́A����̃N���X�Q����邤���ŁA�p���𗘗p���ĕ����̃T�u�N���X�����̂��A����Ƃ��N���X�͈�‚ɂ��ă����o�[�̒l�ɂ���ē���𕪂���̂��Ƃ�����肪����܂��B��҂̏ꍇ�́A��|�����t�B�b�N�ȃN���X�݌v�ɂȂ�܂��B

�T�u�N���X�ɂ���ĕ�����ꍇ

abstract class Animal {
  abstract int getLeg();
}
class Kame extends Animal {
  int getLeg() {
    return 4;
  }
}
class Tsuru extends Animal {
  int getLeg() {
    return 2;
  }
}

�C���X�^���X�ɂ���ĕ�����ꍇ

class Animal {
  String type;
  Animal(String type) {
    this.type = type;
  }
  int getLeg() {
    if (type.equals("Kame")) {
      return 4;
    }
    else if (type.equals("Tsuru")) {
      return 2;
    }
  }
}

���ۂ̋Ɩ��Ńf�U�C���p�^�[�����g����

��K�͂ȃv���W�F�N�g�ł́A�t���[�����[�N�����`�[���ƃt���[�����[�N�ɉ����Ď������Ă����`�[���Ƃ̓�‚ɕ�����܂��B�ǂ���ɑ����邩�ŁA�I�u�W�F�N�g�w����g�ɂ‚����邩�ǂ��������܂�܂��BJava���g���Ă���΁A�I�u�W�F�N�g�w��������Ă���Ƃ����킯�ł͂���܂���B

�t���[�����[�N�ɉ����Ď�������`�[���ɉ�������ꍇ�A�f�U�C���p�^�[����K�p����ǂ��납�A����ɃN���X�����̂��狖�‚���܂���B�傫�ȃv���W�F�N�g�ł́A�X�l�����𔭊����Ă΂�΂�Ȃ��̂��������A�S�̂̃X�^�C�������ꂳ��Ă��邱�Ƃ��d�v������ł��B

�t���[�����[�N�̓K�p�ɂ̓����b�g������΃f�����b�g������܂��B�X�^�C�������ꂳ��A�y�ɑg�߂�悤�ɂȂ����Ƃ��������b�g�̔��ʁA������Ƃ��������ł��t���[�����[�N�ɂ��������đ�ʂɖ��ʂȃR�[�h�������Ȃ���΂Ȃ�Ȃ�������A�t���[�����[�N���ł͕s�”\�ȏ����������Ė�����荇�킹�邽�߂ɉ�肭�ǂ������������Ȃ���΂Ȃ�Ȃ�������Ƃ��������Ƃ�����܂��B�t���[�����[�N���͔̂��ɃI�u�W�F�N�g�w���I�Ȃ̂ɁA�����Ɏ�������Ă���R�[�h�͑S���葱���^�ł���Ƃ�����Ȃ��Ƃ��N���܂��B

��������͋Ɩ��A�v���P�[�V�����̏ꍇ�ŁA����n��c�[����P�̃A�v���P�[�V�������쐬����ꍇ�́A�f�U�C���p�^�[�������ɗ��‚ł��傤�B

�ŏ��̃J�e�S���[�ŁA�|�����[�t�B�Y�����g�����T�u�N���X�̐؂�ւ��̃p�^�[���́A���ۃt���[�����[�N�ŗp��������̂ł��B�|�����[�t�B�Y���̓C���^�[�t�F�[�X�𓝈ꂵ�ċK�i�𐮂��邽�߂Ɏg�p������̂Ȃ̂ŁA�v���W�F�N�g�̒��ŌX�̃v���O���}�[������ɃC���^�[�t�F�[�X������Ă��悤�Ȃ��̂ł͂Ȃ��̂ł��B���Ŗ�L�Ǝg���Ɠǂ݂ɂ������̂��o���オ��܂��B

�܂��ADecorator��ChainOfResponsibility�Ȃǂ̃g���b�L�[�Ȃ��̂����ێg�����Ƃ͂܂�ł��B��������Ǝc��́A�R�[�f�B���O���Ă���Ύ��R�Ɏg�����̂��炢�ɂȂ��Ă��܂��܂��B�����Ƀf�U�C���p�^�[����K�p���悤�Ƃ���̂ł͂Ȃ��A�œK�ȃN���X�\������邱�Ƃ���؂��Ǝv���܂��B






���̓��e�ɂ‚��Ă��ӌ�����������

 
   ���ɗ�����    �܂��܂�    �‚܂�Ȃ�    ���    �^�₪����

�R�����g�i����E�w�E�E�v�]�Ȃ�ł��ǂ����j
  
���[���A�h���X�F 

  

Copyright Dayan All rights reserved. Create: 2004.08.31 Last Update: 2006.10.10