�@

�A��
.NET�Ŏn�߂�f�U�C���p�^�[��

��3�� ���t�@�N�^�����O�ɂ�蓱���o��Strategy�p�^�[��

���z�V�X�e��������Ё@���� �f��
2005/03/19
Page1 Page2 Page3


Back Issue
1
.NET�J���ɂ�����f�U�C���p�^�[���̗L�p��
2
���܂��f�U�C���p�^�[�����g�����߂̐S��
3
���t�@�N�^�����O�ɂ�蓱���o��Strategy�p�^�[��
4
���t�@�N�^�����O�ɂ�蓱���o��Template Method�p�^�[��
5
Composite�p�^�[���𓱂��o�����߂̏���
6
���t�@�N�^�����O�ɂ�蓱���o��Composite�p�^�[��
7
�f�U�C���p�^�[���̗��Ƃ���

�@�O���ŏq�ׂ��悤�ɁA�f�U�C���p�^�[���̓��t�@�N�^�����O�ɂ�蓱���o�����Ƃ��ł���B���̃��t�@�N�^�����O�ߒ��𖾂炩�ɂ��邱�ƂŁA�����œ����o�����f�U�C���p�^�[���̈Ӗ���ړI����蕪����₷���Ȃ邾�낤�B

�@�����ō��񂩂�̓T���v���E�R�[�h�����t�@�N�^�����O���A��������f�U�C���p�^�[���𓱂��o�����@��������Ă����B�����”\�Ȃ玩���Ŏ��ۂɃR�[�h���L�q���Ă��̃��t�@�N�^�����O�̉ߒ����m�F���Ȃ���ǂݐi�߂Ăق����B��������΁A�����̌o���Ƃ��Ă��̓��e�����[�������ł���͂����B

�@�Ȃ��{�e�̊J���菇�́A���ׂăe�X�g�쓮�J���iTDD�FTest-Driven Development�j�̃X�^�C���ōs���i�e�X�g�쓮�J���ɂ‚��ẮA�u�e�X�g�쓮�J���c�[���őO���v���Q�Ƃ��ꂽ���j�B

���t�@�N�^�����O�O�̐݌v

�@���܂���g�p����T���v���E�R�[�h�ł́A���̂悤�Ȏd�l��XpValues�N���X���쐬����B

�yXpValues�N���X�z

�@XP�i�G�N�X�g���[���E�v���O���~���O�j�́u5�‚̉��l�v�̓��e�i�R�~���j�P�[�V�����A�V���v���A�t�B�[�h�o�b�N�A�E�C�A�h�Ӂj��ێ�����B

�@�i1�j�u5�‚̉��l�v�̓��e���v���[���E�e�L�X�g�`���ŏo�͂ł���B
�@�i2�j�u5�‚̉��l�v�̓��e��HTML�`���ŏo�͂ł���B

�@�܂��͂���XpValues�N���X�p�̃e�X�g�E�R�[�h�����Ă����������i�e�X�g�E�R�[�h�̎������e�ɂ‚��Ă͉�����Ȃ��̂ŁA�ڂ����̓R�[�h���̃R�����g���Q�Ƃ��Ăق����j�B

��XpValuesTest�N���X�̎������e

�@���̃e�X�g�E�R�[�h���L�q�����i�K�ŁA�ȉ��̂悤��XpValues�N���X�̍\�����`�����B

��XpValues�N���X�ɂ́A���̃C���X�^���X�������s�����߂̐ÓI���\�b�h�Ƃ��Ď���2��ނ�����B

�i1�jCreatePlainTextFormatableXpValues���\�b�h

�@���̃��\�b�h�Ő������ꂽXpValues�N���X�̃C���X�^���X�́A�v���[���E�e�L�X�g�`����XP�̉��l���o�͂���B

�i2�jCreateHtmlTextFormatableXpValues���\�b�h

�@���̃��\�b�h�Ő������ꂽXpValues�N���X�̃C���X�^���X�́AHTML�`����XP�̉��l���o�͂���B

�@�e�X�g�E�R�[�h�͈ȉ��̂悤�ɂȂ��Ă���B

using System;
using System.Collections;
using NUnit.Framework;
using DesignPatterns.Core.TemplateMethod;

namespace DesignPatterns.Tests.TemplateMethod
{
  // XpValues�N���X�̃e�X�g�E�N���X
  [TestFixture] public class XpValuesTest
  {
    // XpValues�N���X�̃C���X�^���X���i�[����t�B�[���h�ϐ�
    private XpValues target;

    // �e�X�g�̏�����
    [SetUp] public void Init()
    {
      // XpValues�I�u�W�F�N�g�̐����i�v���[���E�e�L�X�g�`���ŏo�͂ł���j
      target = XpValues.CreatePlainTextFormatableXpValues("XP 2nd Edition");
    }

    // XpValues�I�u�W�F�N�g�𐶐�����e�X�g
    [Test] public void CreateInsatance()
    {
      Assert.AreEqual("XP 2nd Edition", target.Name, "���O���Ⴂ�܂��B");
      Assert.AreEqual(0, target.Count, "���l�̐����Ⴂ�܂��B");
    }

    // XP�́u5�‚̉��l�v�̓��e��o�^����e�X�g
    [Test] public void Add()
    {
      target.Add("�R�~���j�P�[�V����");
      target.Add("�V���v��");
      target.Add("�t�B�[�h�o�b�N");
      target.Add("�E�C");
      target.Add("�h��");

      Assert.AreEqual(5, target.Count, "���l�̐����Ⴂ�܂��B");
      Assert.AreEqual("�R�~���j�P�[�V����", target[0], "���l���Ⴂ�܂��B");
      Assert.AreEqual("�V���v��", target[1], "���l���Ⴂ�܂��B");
      Assert.AreEqual("�t�B�[�h�o�b�N", target[2], "���l���Ⴂ�܂��B");
      Assert.AreEqual("�E�C", target[3], "���l���Ⴂ�܂��B");
      Assert.AreEqual("�h��", target[4], "���l���Ⴂ�܂��B");
    }

    // �u5�‚̉��l�v�̓o�^���e�𑖍�����e�X�g
    [Test] public void GetEnumerator()
    {
      target.Add("�R�~���j�P�[�V����");
      target.Add("�V���v��");

      IEnumerator en = target.GetEnumerator();

      Assert.IsTrue(en.MoveNext(), "���̗v�f�͑��݂���͂��ł��B");
      Assert.AreEqual("�R�~���j�P�[�V����", en.Current, "�v�f���Ⴂ�܂��B");
      Assert.IsTrue(en.MoveNext(), "���̗v�f�͑��݂���͂��ł��B");
      Assert.AreEqual("�V���v��", en.Current, "�v�f���Ⴂ�܂��B");
      Assert.IsFalse(en.MoveNext(), "���̗v�f�͑��݂��Ȃ��͂��ł��B");
    }

    // �v���[���E�e�L�X�g�`���Łu5�‚̉��l�v���o�͂���e�X�g
    [Test] public void PlainTextFormat()
    {
      target.Add("�R�~���j�P�[�V����");
      target.Add("�V���v��");
      target.Add("�t�B�[�h�o�b�N");
      target.Add("�E�C");
      target.Add("�h��");

      string expected =
        "XP 2nd Edition��5�‚̉��l\r\n" +
        "�E�R�~���j�P�[�V����\r\n" +
        "�E�V���v��\r\n" +
        "�E�t�B�[�h�o�b�N\r\n" +
        "�E�E�C\r\n" +
        "�E�h��\r\n";

      Assert.AreEqual(expected, target.Format(), "���ʂ��Ⴂ�܂��B");
    }

    // HTML�`���Łu5�‚̉��l�v���o�͂���e�X�g
    [Test] public void HtmlTextFormat()
    {
      // XpValues�I�u�W�F�N�g�̐����iHTML�`���ŏo�͂ł���j
      target = XpValues.CreateHtmlTextFormatableXpValues("XP 2nd Edition");

      target.Add("�R�~���j�P�[�V����");
      target.Add("�V���v��");
      target.Add("�t�B�[�h�o�b�N");
      target.Add("�E�C");
      target.Add("�h��");

      string expected =
        "<p>XP 2nd Edition��5�‚̉��l</p>\r\n" +
        "<ul>\r\n" +
        "<li>�R�~���j�P�[�V����\r\n" +
        "<li>�V���v��\r\n" +
        "<li>�t�B�[�h�o�b�N\r\n" +
        "<li>�E�C\r\n" +
        "<li>�h��\r\n" +
        "</ul>\r\n";

      Assert.AreEqual(expected, target.Format(), "���ʂ��Ⴂ�܂��B");
    }
  }
}
XpValues�N���X�̃e�X�g�E�R�[�h�iC#�j

��XpValues�N���X�̏����R�[�h�i���t�@�N�^�����O�O�j

�@���ɁA�����̃e�X�g�����ׂăp�X����XpValues�N���X�̎����R�[�h���ȉ��Ɏ����B����̓��t�@�N�^�����O�O�́A��肠�����e�X�g���p�X�����邽�߂ɋL�q���Ă݂��Ƃ������x���̃R�[�h���B

using System;
using System.Collections;
using System.Text;

namespace DesignPatterns.Core.TemplateMethod
{
  // XpValues�N���X
  public class XpValues : IEnumerable
  {
    private string name;
    // �o�͌`���̃^�C�v��ێ�����t�B�[���h�ϐ�
    private int formatType;
    private ArrayList values = new ArrayList();

    // �v���C�x�[�g�E�R���X�g���N�^
    private XpValues(string name, int formatType)
    {
      this.name = name;
      this.formatType = formatType;
    }

    // �ێ�����u���l�v���v���[���E�e�L�X�g�`���ŏo�͂ł���C���X�^���X�𐶐�
    public static XpValues CreatePlainTextFormatableXpValues(string name)
    {
      return new XpValues(name, 0);
    }

    // �ێ�����u���l�v��HTML�`���ŏo�͂ł���C���X�^���X�𐶐�
    public static XpValues CreateHtmlTextFormatableXpValues(string name)
    {
      return new XpValues(name, 1);
    }

    // ���O���擾����
    public string Name
    {
      get { return name; }
    }

    // �u���l�v�̐����擾����
    public int Count
    {
      get { return values.Count; }
    }

    // �u���l�v���擾����
    public string this[int index]
    {
      get { return values[index].ToString(); }
    }

    // �u���l�v��o�^����
    public void Add(string xpValue)
    {
      values.Add(xpValue);
    }

    // XpValues �𔽕������ł���񋓎q���擾����
    public IEnumerator GetEnumerator()
    {
      return values.GetEnumerator();
    }

    // �ێ�����u���l�v���o�͂���
    public string Format()
    {
      if (formatType == 0)  // �v���[���E�e�L�X�g�`��
      {
        StringBuilder builder = new StringBuilder();
        builder.Append(GetTitle() + "\r\n");
        foreach (string xpValue in values)
          builder.Append("�E" + xpValue + "\r\n");
        return builder.ToString();
      }
      else  // HTML�`��
      {
        StringBuilder builder = new StringBuilder();
        builder.Append("<p>" + GetTitle() + "</p>\r\n");
        builder.Append("<ul>\r\n");
        foreach (string xpValue in values)
          builder.Append("<li>" + xpValue + "\r\n");
        builder.Append("</ul>\r\n");
        return builder.ToString();
      }
    }

    // �^�C�g�����擾����
    private string GetTitle()
    {
      return name + "��" + values.Count.ToString() + "�‚̉��l";
    }
  }
}
���t�@�N�^�����O�O��XpValues�N���X�̎����R�[�h�iC#�j

���t�@�N�^�����O�ɂ��Strategy�p�^�[���̓K�p

�@���ꂩ����ۂ�XpValues�N���X�����t�@�N�^�����O���Ă����킯�����A��\�I�ȃ��t�@�N�^�����O�E�J�^���O�ɂ͈ȉ���2�‚����邽�߁A�����ł̓��t�@�N�^�����O�̖��O�����Ɏ����悤�ȕ\�L�ɂ���ʂ��邱�Ƃɂ���B

  • Martin Fowler���ɂ�鏑�Ёw���t�@�N�^�����O�x�̃J�^���O�ɋL�ڂ���Ă��郊�t�@�N�^�����O�̖��O�́A�u���\�b�h�̈ړ��iF�j�v�Ƃ����悤�ɁiF�j�ƕ\�L����B

  • Joshua Kerievsky���ɂ�鏑�ЁwRefactoring to Patterns�x�̃J�^���O�ɋL�ڂ���Ă��郊�t�@�N�^�����O�̖��O�́A�uReplace Conditional Logic with Strategy�iK�j�v�Ƃ����悤�ɁiK�j�ƕ\�L����B

�@�܂��ȍ~�̃\�[�X�E�R�[�h�ł́A���t�@�N�^�����O�ɂ��lj�����яC�����ꂽ�R�[�h�͐F�ŁA���t�@�N�^�����O�ɂ��폜���ꂽ�R�[�h�͐ԐF�Ɏ��������ŕ\�L����B

��Strategy�p�^�[���ɂ��������W�b�N�̒u������

�@�܂��AXpValues�N���X�̎����R�[�h�ŋC�ɂȂ�̂�Format���\�b�h���B���̃��\�b�h����͏����L�q��d�������A���S���Y���Ȃǂ́u�R�[�h�̕s�g�ȓ����v���Y���Ă���B

�@���t�@�N�^�����O�̑�1�i�K�Ƃ��ẮA�����L�q�Ɋւ�������������悤�B�����L�q�����̂܂܂ɂ��Ă����΁A�V�����`���Łu���l�v���o�͂���悤�ȕύX�����������ꍇ�ɁA�����L�q��������Format���\�b�h�͂���ɕ��G�����邱�ƂɂȂ邾�낤�B

�@�����ŁA�قȂ����`���Łu���l�v���o�͂��邽�߂̃A���S���Y�����N���X�ɕ������ēƗ������A����ɂ��ꂼ��̃A���S���Y�����J�v�Z�������Č����”\�ɂł���΁A���ꂼ��̃A���S���Y���͏������򂩂�Ɨ��������̂ƂȂ�̂ŁA���̂悤�ȕύX�ɑ΂���C�����ŏ����ɗ}������͂����B

�@����́uStrategy�p�^�[���v�̖ړI�ƈ�v����B���Ёw�I�u�W�F�N�g�w���ɂ�����ė��p�̂��߂̃f�U�C���p�^�[���x�ł́AStrategy�p�^�[���̖ړI�͎��̂悤�ɋL�q����Ă���B

�A���S���Y���̏W�����`���A�e�A���S���Y�����J�v�Z�������āA�����������”\�ɂ���BStrategy�p�^�[���𗘗p���邱�ƂŁA�A���S���Y�����A����𗘗p����N���C�A���g����͓Ɨ��ɕύX���邱�Ƃ��ł���悤�ɂȂ�B

�@Strategy�Ƃ͖{���u�헪�v�Ƃ����Ӗ������A�����ł̓J�v�Z�������ꂽ�e�A���S���Y���̂��Ƃ�Strategy�ƍl���Ă悢���낤�B

�@����ł́A�������W�b�N����Strategy�p�^�[���𓱂����߂̃��t�@�N�^�����O�̎菇���Љ�悤�B


�@INDEX
�@ .NET�Ŏn�߂�f�U�C���p�^�[��
�@ ��3�� ���t�@�N�^�����O�ɂ�蓱���o��Strategy�p�^�[��
  1�D���t�@�N�^�����O�O�̐݌v
�@   2�D���t�@�N�^�����O�ɂ��Strategy�p�^�[���̓K�p
�@   3�D�|�����[�t�B�Y���ɂ������L�q�̒u������
�@
CfbNXEy[Ww �@�u.NET�Ŏn�߂�f�U�C���p�^�[���v


Insider.NET �t�H�[���� �V���L��
  • ��2��@�Ȍ��ȃR�[�f�B���O�̂��߂� �i2017/7/26�j
    �@�����_���ŋL�q�ł��郁���o�̑����Athrow���Aout�ϐ��A�^�v���ȂǁAC# 7�ɂ͈ȑO�����R�[�h���Ȍ��ɋL�q�ł���悤�ȋ@�\����������Ă���
  • ��1��@Visual Studio Code�f�o�b�O�̊�b�m�� �i2017/7/21�j
    �@Node.js�v���O�������f�o�b�O���Ȃ���AVisual Studio Code�ɓ�������Ă���f�o�b�O�@�\�̊�{�́u�L�v���}�X�^�[���悤
  • ��1��@���ĂȃR�[�f�B���O�̂��߂� �i2017/7/19�j
    �@C# 7�Œlj����ꂽ�V�@�\�̒�����A�u���l���e�����\���̉��P�v�Ɓu���[�J���֐��v���Љ��B�����͕�����₷���R�[�h���L�q����̂Ɏg����
  • Presentation Translator �i2017/7/18�j
    �@Presentation Translator��PowerPoint�p�̃A�h�C���B�v���[���e�[�V�������̎����̕t����A������ł̎��^�����A�X���C�h�̖|����s����
��IT���[���}�K�W���@�V������X�^�b�t�̃R���������[���œ͂��܂��i�����j

���ڂ̃e�[�}

Insider.NET �L�������L���O

�{�� ����