<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>VB</title><link>http://blogs.wankuma.com/masaru/category/1288.aspx</link><description>VB</description><managingEditor>まさる</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>まさる</dc:creator><title>デザインパターンを学ぶ～その１8：Singletonパターン(1)～</title><link>http://blogs.wankuma.com/masaru/archive/2008/06/08/142217.aspx</link><pubDate>Sun, 08 Jun 2008 01:24:00 GMT</pubDate><guid>http://blogs.wankuma.com/masaru/archive/2008/06/08/142217.aspx</guid><wfw:comment>http://blogs.wankuma.com/masaru/comments/142217.aspx</wfw:comment><comments>http://blogs.wankuma.com/masaru/archive/2008/06/08/142217.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/masaru/comments/commentRss/142217.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/masaru/services/trackbacks/142217.aspx</trackback:ping><description>&lt;blockquote&gt;&lt;strong&gt;Singleton　（シングルトン）&lt;/strong&gt;&lt;br&gt;　一人っ子、単一のこと・もの &lt;/blockquote&gt; &lt;p&gt;Singletonパターンは、インスタンスがひとつしかない唯一のオブジェクトを生成し、そのインスタンスを取得する方法を公開します。  &lt;p&gt;例えば、アプリケーション実行時のログを出力するような場合を考えます。ログのファイル名をシステム日付＋時刻でつけるとしましょう。ログ出力を初回に行う際に、ログファイル名を決定し、以後はそのログファイルにログを出力します。  &lt;p&gt;この場合、ログファイル名はアプリケーション実行時に1つだけでなくてはなりません。このような場合、Singletonが使えます。  &lt;p&gt;&amp;nbsp; &lt;p&gt;以下に、コード例を示します。  &lt;h5&gt;C#&lt;/h5&gt;&lt;pre class="c#" name="code"&gt;/// &amp;lt;summary&amp;gt;
/// ログ出力クラス
/// &amp;lt;/summary&amp;gt;
public class SingletonLogger
{
  /// &amp;lt;summary&amp;gt;
  /// ログ出力パス
  /// &amp;lt;/summary&amp;gt;
  private string _logPath;

  /// &amp;lt;summary&amp;gt;
  /// プロパティ ログ出力パス
  /// &amp;lt;/summary&amp;gt;
  public string LogPath
  {
    get
    {
      return _logPath;
    }
  }

  /// &amp;lt;summary&amp;gt;
  /// コンストラクタ
  /// &amp;lt;/summary&amp;gt;
  /// &amp;lt;remarks&amp;gt;new でインスタンス化できないよう、privateでコンストラクタを定義&amp;lt;/remarks&amp;gt;
  private SingletonLogger()
  {
    _logPath = DateTime.Now.ToString("yyyyMMddhhmmssfff") + ".log";
  }

  /// &amp;lt;summary&amp;gt;
  /// 自身の唯一のインスタンス
  /// &amp;lt;/summary&amp;gt;
  private static SingletonLogger _uniqueLogger;

  /// &amp;lt;summary&amp;gt;
  /// プロパティ インスタンス
  /// &amp;lt;/summary&amp;gt;
  /// &amp;lt;remarks&amp;gt;自身の唯一のインスタンスを返す&amp;lt;/remarks&amp;gt;
  public static SingletonLogger Instance
  {
    get
    {
      if ( _uniqueLogger == null )
      {
        _uniqueLogger = new SingletonLogger();
      }
      return _uniqueLogger;
    }
  }

  /// &amp;lt;summary&amp;gt;
  /// ログ出力
  /// &amp;lt;/summary&amp;gt;
  /// &amp;lt;param name="message"&amp;gt;&amp;lt;/param&amp;gt;
  public void WriteLog(string message)
  {
    // ログ出力処理
    // ・・・
  }
}
&lt;/pre&gt;
&lt;h5&gt;VB&lt;/h5&gt;&lt;pre class="VB" name="code"&gt;''' &amp;lt;summary&amp;gt;
''' ログ出力クラス
''' &amp;lt;/summary&amp;gt;
''' &amp;lt;remarks&amp;gt;&amp;lt;/remarks&amp;gt;
Public Class SingletonLogger

  ''' &amp;lt;summary&amp;gt;
  ''' ログ出力パス
  ''' &amp;lt;/summary&amp;gt;
  ''' &amp;lt;remarks&amp;gt;&amp;lt;/remarks&amp;gt;
  Private _logPath As String

  ''' &amp;lt;summary&amp;gt;
  ''' プロパティ ログ出力パス
  ''' &amp;lt;/summary&amp;gt;
  ''' &amp;lt;value&amp;gt;&amp;lt;/value&amp;gt;
  ''' &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
  ''' &amp;lt;remarks&amp;gt;&amp;lt;/remarks&amp;gt;
  Public ReadOnly Property LogPath() As String
    Get
      Return _logPath
    End Get
  End Property

  ''' &amp;lt;summary&amp;gt;
  ''' コンストラクタ
  ''' &amp;lt;/summary&amp;gt;
  ''' &amp;lt;remarks&amp;gt;new でインスタンス化できないよう、privateでコンストラクタを定義&amp;lt;/remarks&amp;gt;
  Private Sub New()
    _logPath = DateTime.Now.ToString("yyyyMMddhhmmssfff") &amp;amp; ".log"
  End Sub

  ''' &amp;lt;summary&amp;gt;
  ''' 自身の唯一のインスタンス
  ''' &amp;lt;/summary&amp;gt;
  ''' &amp;lt;remarks&amp;gt;&amp;lt;/remarks&amp;gt;
  Private Shared _uniqueLogger As SingletonLogger

  ''' &amp;lt;summary&amp;gt;
  ''' プロパティ インスタンス
  ''' &amp;lt;/summary&amp;gt;
  ''' &amp;lt;value&amp;gt;&amp;lt;/value&amp;gt;
  ''' &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
  ''' &amp;lt;remarks&amp;gt;自身の唯一のインスタンスを返す&amp;lt;/remarks&amp;gt;
  Public Shared ReadOnly Property Instance() As SingletonLogger
    Get
      If _uniqueLogger Is Nothing Then
        _uniqueLogger = New SingletonLogger
      End If
      Return _uniqueLogger
    End Get
  End Property

  ''' &amp;lt;summary&amp;gt;
  ''' ログ出力
  ''' &amp;lt;/summary&amp;gt;
  ''' &amp;lt;param name="message"&amp;gt;&amp;lt;/param&amp;gt;
  Public Sub WriteLog(ByVal message As String)
    ' ログ出力処理
    ' ・・・
  End Sub

End Class
&lt;/pre&gt;
&lt;p&gt;このコードのポイントは以下の3点です。
&lt;ul&gt;
&lt;li&gt;コンストラクタをprivateとして、外からはインスタンス化できないようにする。&lt;/li&gt;
&lt;li&gt;privateな静的フィールドとして、自身の型のフィールドを用意し、クライアントにはそれを提供するようにする。&lt;/li&gt;
&lt;li&gt;Instanceプロパティ内で、上記静的フィールドがnullの場合のみ、新たにインスタンス化するようにし、唯一のオブジェクトを保障する。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp; &lt;p&gt;以上のコードを使って見ましょう。 
&lt;h5&gt;C#&lt;/h5&gt;&lt;pre class="c#" name="code"&gt;public class Program
{
  static void Main(string[] args)
  {
    {
      var logger = SingletonLogger.Instance;
      Console.WriteLine(logger.LogPath);
    }

    System.Threading.Thread.Sleep(1000);

    {
      var logger = SingletonLogger.Instance;
      Console.WriteLine(logger.LogPath);
    }

    Console.ReadKey();
  }
}
&lt;/pre&gt;
&lt;h5&gt;VB&lt;/h5&gt;&lt;pre class="VB" name="code"&gt;Public Class Program

  Public Shared Sub Main()

    With Nothing
      Dim logger = SingletonLogger.Instance
      Console.WriteLine(logger.LogPath)
    End With

    System.Threading.Thread.Sleep(1000)

    With Nothing
      Dim logger = SingletonLogger.Instance
      Console.WriteLine(logger.LogPath)
    End With

    Console.ReadKey()

  End Sub

End Class
&lt;/pre&gt;
&lt;h4&gt;実行結果&lt;/h4&gt;&lt;pre class="code" style="margin-top: 0.5em"&gt;20080608125533068.log
20080608125533068.log
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp; &lt;p&gt;実行結果を見るとわかるように、1つのインスタンスが使いまわされていることがわかります。 
&lt;p&gt;&amp;nbsp; &lt;p&gt;さて、以上のコードは、通常の使用方法では問題がないのですが、以下のようにマルチスレッドで動かす場合、1つだけであるはずのインスタンスが、複数生成されてしまうことがあります。 
&lt;h5&gt;C#&lt;/h5&gt;&lt;pre class="c#" name="code"&gt;/// ログ出力クラス
/// &amp;lt;/summary&amp;gt;
public class SingletonLogger
{
  ・・・

  /// &amp;lt;summary&amp;gt;
  /// コンストラクタ
  /// &amp;lt;/summary&amp;gt;
  /// &amp;lt;remarks&amp;gt;new でインスタンス化できないよう、privateでコンストラクタを定義&amp;lt;/remarks&amp;gt;
  private SingletonLogger()
  {
    // 重い初期化処理
    for ( var i = 0; i &amp;lt; 100000000; i++ )
    {
    }

    _logPath = DateTime.Now.ToString("yyyyMMddhhmmssfff") + ".log";
  }

  ・・・
}

public class Program
{
  static void Main(string[] args)
  {
    SingletonLogger logger1 = null;
    var thread1 = new Thread(
      () =&amp;gt;
      {
        logger1 = SingletonLogger.Instance;
      }
    );
    SingletonLogger logger2 = null;
    var thread2 = new Thread(
      () =&amp;gt;
      {
        logger2 = SingletonLogger.Instance;
      }
    );

    thread1.Start();
    thread2.Start();

    while ( logger1 == null || logger2 == null)
    {
      Thread.Sleep(10);
    }

    Console.WriteLine(logger1.LogPath);
    Console.WriteLine(logger2.LogPath);

    Console.ReadKey();
  }
}
&lt;/pre&gt;
&lt;h5&gt;VB&lt;/h5&gt;&lt;pre class="VB" name="code"&gt;''' &amp;lt;summary&amp;gt;
''' ログ出力クラス
''' &amp;lt;/summary&amp;gt;
''' &amp;lt;remarks&amp;gt;&amp;lt;/remarks&amp;gt;
Public Class SingletonLogger

  ・・・

  ''' &amp;lt;summary&amp;gt;
  ''' コンストラクタ
  ''' &amp;lt;/summary&amp;gt;
  ''' &amp;lt;remarks&amp;gt;new でインスタンス化できないよう、privateでコンストラクタを定義&amp;lt;/remarks&amp;gt;
  Private Sub New()
    ' 重い初期化処理
    For i As Integer = 0 To 100000000
    Next i

    _logPath = DateTime.Now.ToString("yyyyMMddhhmmssfff") &amp;amp; ".log"
  End Sub

  ・・・

End Class

Public Class Program

  Public Shared Sub Main()

    Dim logger1 As SingletonLogger = Nothing
    Dim loggerHelper1 As New LoggerHelper(logger1)
    Dim thread1 = New Thread(AddressOf loggerHelper1.SetLogger)

    Dim logger2 As SingletonLogger = Nothing
    Dim loggerHelper2 As New LoggerHelper(logger2)
    Dim thread2 = New Thread(AddressOf loggerHelper2.SetLogger)

    thread1.Start()
    thread2.Start()

    While (logger1 Is Nothing OrElse logger2 Is Nothing)
      Thread.Sleep(10)
    End While

    Console.WriteLine(logger1.LogPath)
    Console.WriteLine(logger2.LogPath)

    Console.ReadKey()

  End Sub

  Public Class LoggerHelper

    Private _logger As SingletonLogger

    Public Sub New(ByRef logger As SingletonLogger)
      _logger = logger
    End Sub

    Public Sub SetLogger()
      _logger = SingletonLogger.Instance
    End Sub
  End Class

End Class
&lt;/pre&gt;
&lt;h4&gt;実行結果&lt;/h4&gt;&lt;pre class="code" style="margin-top: 0.5em"&gt;20080608011949432.log
20080608011949613.log
&lt;/pre&gt;
&lt;p&gt;ごらんのように、インスタンスが２つ生成された結果、ログ出力パスが変わってしまいます。 
&lt;p&gt;この問題を解消する方法はないのでしょうか？ 
&lt;p&gt;&amp;nbsp; &lt;p&gt;実はあります。このあたり、次回のエントリで取り上げようと思います。 
&lt;p&gt;&amp;nbsp; &lt;p&gt;＃今回から、.NET Framework 3.5 のコードにしています。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/masaru/aggbug/142217.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>まさる</dc:creator><title>デザインパターンを学ぶ～その１６：Factoryパターン(3)～</title><link>http://blogs.wankuma.com/masaru/archive/2008/02/27/125280.aspx</link><pubDate>Wed, 27 Feb 2008 23:58:00 GMT</pubDate><guid>http://blogs.wankuma.com/masaru/archive/2008/02/27/125280.aspx</guid><wfw:comment>http://blogs.wankuma.com/masaru/comments/125280.aspx</wfw:comment><comments>http://blogs.wankuma.com/masaru/archive/2008/02/27/125280.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/masaru/comments/commentRss/125280.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/masaru/services/trackbacks/125280.aspx</trackback:ping><description>&lt;p&gt;記念すべき100エントリ目となりました。いい加減にシリーズ再開せねばということで、&lt;a href="http://blogs.wankuma.com/masaru/archive/2007/11/07/106471.aspx" target="_blank"&gt;前回&lt;/a&gt;から間が空きましたが、今回はAbstract Factoryパターンを取り上げます。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Abstract Factoryパターンは、具象クラスに依存することなく、一連の関連するオブジェクトを生成するためのインタフェイスを提供します。&lt;/p&gt; &lt;p&gt;具体的には、例えばGUIインタフェイスでスキンを指定したら、それに紐付くボタン、枠、スクロールバーなどを生成する、といった用途で使われているようですね。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;では、コード例です。今回はお弁当の種類に応じたごはんとおかずを作るFactoryをコードにしてみます。&lt;/p&gt; &lt;ol&gt; &lt;li&gt;生成される製品の抽象クラスを定義します。  &lt;h5 class="cs-header"&gt;C# Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;abstract&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;Abstractごはん&lt;/span&gt;
{
  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;abstract&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;
  {
    &lt;span class="keyword"&gt;get&lt;/span&gt;;
  }
}

&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;abstract&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;
{
  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;abstract&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;
  {
    &lt;span class="keyword"&gt;get&lt;/span&gt;;
  }
}
&lt;/pre&gt;
&lt;h5 class="vb-header"&gt;VB Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;MustInherit&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;Abstractごはん&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;MustOverride&lt;/span&gt; &lt;span class="keyword"&gt;ReadOnly&lt;/span&gt; &lt;span class="keyword"&gt;Property&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;

&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;MustInherit&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;MustOverride&lt;/span&gt; &lt;span class="keyword"&gt;ReadOnly&lt;/span&gt; &lt;span class="keyword"&gt;Property&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;1.で作成した抽象製品クラスを継承し、具象製品クラスを定義します。 
&lt;h5 class="cs-header"&gt;C# Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;ごはん&lt;/span&gt; : &lt;span class="id"&gt;Abstractごはん&lt;/span&gt;
{
  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;
  {
    &lt;span class="keyword"&gt;get&lt;/span&gt; { &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="literal"&gt;"ごはん"&lt;/span&gt;; }
  }
}

&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;ふりかけごはん&lt;/span&gt; : &lt;span class="id"&gt;Abstractごはん&lt;/span&gt;
{
  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;
  {
    &lt;span class="keyword"&gt;get&lt;/span&gt; { &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="literal"&gt;"ふりかけごはん"&lt;/span&gt;; }
  }
}

&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;ごま塩ごはん&lt;/span&gt; : &lt;span class="id"&gt;Abstractごはん&lt;/span&gt;
{
  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;
  {
    &lt;span class="keyword"&gt;get&lt;/span&gt; { &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="literal"&gt;"ごま塩ごはん"&lt;/span&gt;; }
  }
}

&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;梅干し&lt;/span&gt; : &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;
{
  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;
  {
    &lt;span class="keyword"&gt;get&lt;/span&gt; { &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="literal"&gt;"梅干し"&lt;/span&gt;; }
  }
}

&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;から揚げ&lt;/span&gt; : &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;
{
  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;
  {
    &lt;span class="keyword"&gt;get&lt;/span&gt; { &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="literal"&gt;"から揚げ"&lt;/span&gt;; }
  }
}

&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;玉子焼き&lt;/span&gt; : &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;
{
  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;
  {
    &lt;span class="keyword"&gt;get&lt;/span&gt; { &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="literal"&gt;"玉子焼き"&lt;/span&gt;; }
  }
}

&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;焼き鮭&lt;/span&gt; : &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;
{
  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;
  {
    &lt;span class="keyword"&gt;get&lt;/span&gt; { &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="literal"&gt;"焼き鮭"&lt;/span&gt;; }
  }
}

&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;煮物&lt;/span&gt; : &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;
{
  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;
  {
    &lt;span class="keyword"&gt;get&lt;/span&gt; { &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="literal"&gt;"煮物"&lt;/span&gt;; }
  }
}

&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;ウインナ&lt;/span&gt; : &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;
{
  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;
  {
    &lt;span class="keyword"&gt;get&lt;/span&gt; { &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="literal"&gt;"ウインナ"&lt;/span&gt;; }
  }
}
&lt;/pre&gt;
&lt;h5 class="vb-header"&gt;VB Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;ごはん&lt;/span&gt;
  &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;Abstractごはん&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;ReadOnly&lt;/span&gt; &lt;span class="keyword"&gt;Property&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;
    &lt;span class="keyword"&gt;Get&lt;/span&gt;
      &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="literal"&gt;"ごはん"&lt;/span&gt;
    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Get&lt;/span&gt;
  &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Property&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;

&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;ふりかけごはん&lt;/span&gt;
  &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;Abstractごはん&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;ReadOnly&lt;/span&gt; &lt;span class="keyword"&gt;Property&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;
    &lt;span class="keyword"&gt;Get&lt;/span&gt;
      &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="literal"&gt;"ふりかけごはん"&lt;/span&gt;
    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Get&lt;/span&gt;
  &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Property&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;

&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;ごま塩ごはん&lt;/span&gt;
  &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;Abstractごはん&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;ReadOnly&lt;/span&gt; &lt;span class="keyword"&gt;Property&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;
    &lt;span class="keyword"&gt;Get&lt;/span&gt;
      &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="literal"&gt;"ごま塩ごはん"&lt;/span&gt;
    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Get&lt;/span&gt;
  &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Property&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;

&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;梅干し&lt;/span&gt;
  &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;ReadOnly&lt;/span&gt; &lt;span class="keyword"&gt;Property&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;
    &lt;span class="keyword"&gt;Get&lt;/span&gt;
      &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="literal"&gt;"梅干し"&lt;/span&gt;
    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Get&lt;/span&gt;
  &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Property&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;

&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;から揚げ&lt;/span&gt;
  &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;ReadOnly&lt;/span&gt; &lt;span class="keyword"&gt;Property&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;
    &lt;span class="keyword"&gt;Get&lt;/span&gt;
      &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="literal"&gt;"から揚げ"&lt;/span&gt;
    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Get&lt;/span&gt;
  &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Property&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;

&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;玉子焼き&lt;/span&gt;
  &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;ReadOnly&lt;/span&gt; &lt;span class="keyword"&gt;Property&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;
    &lt;span class="keyword"&gt;Get&lt;/span&gt;
      &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="literal"&gt;"玉子焼き"&lt;/span&gt;
    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Get&lt;/span&gt;
  &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Property&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;

&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;焼き鮭&lt;/span&gt;
  &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;ReadOnly&lt;/span&gt; &lt;span class="keyword"&gt;Property&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;
    &lt;span class="keyword"&gt;Get&lt;/span&gt;
      &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="literal"&gt;"焼き鮭"&lt;/span&gt;
    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Get&lt;/span&gt;
  &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Property&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;

&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;煮物&lt;/span&gt;
  &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;ReadOnly&lt;/span&gt; &lt;span class="keyword"&gt;Property&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;
    &lt;span class="keyword"&gt;Get&lt;/span&gt;
      &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="literal"&gt;"煮物"&lt;/span&gt;
    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Get&lt;/span&gt;
  &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Property&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;

&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;ウインナ&lt;/span&gt;
  &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;ReadOnly&lt;/span&gt; &lt;span class="keyword"&gt;Property&lt;/span&gt; &lt;span class="id"&gt;名前&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;
    &lt;span class="keyword"&gt;Get&lt;/span&gt;
      &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="literal"&gt;"煮物"&lt;/span&gt;
    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Get&lt;/span&gt;
  &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Property&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;1.で作成した抽象クラスそれぞれを生成するメソッド（Factory Method）を持つ、抽象Factoryクラスを定義します。 
&lt;h5 class="cs-header"&gt;C# Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;abstract&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;Abstractお弁当Factory&lt;/span&gt;
{
  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;abstract&lt;/span&gt; &lt;span class="id"&gt;Abstractごはん&lt;/span&gt; &lt;span class="id"&gt;Createごはん&lt;/span&gt;();
  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;abstract&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;[] &lt;span class="id"&gt;Createおかず&lt;/span&gt;();
}
&lt;/pre&gt;
&lt;h5 class="vb-header"&gt;VB Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;MustInherit&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;Abstractお弁当Factory&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;MustOverride&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt; &lt;span class="id"&gt;Createご飯&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;Abstractごはん&lt;/span&gt;
  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;MustOverride&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt; &lt;span class="id"&gt;Createおかず&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;()

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;3.で作成した抽象クラスを継承し、具象Factoryクラスを定義します。 
&lt;h5 class="cs-header"&gt;C# Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;日の丸弁当Factory&lt;/span&gt; : &lt;span class="id"&gt;Abstractお弁当Factory&lt;/span&gt;
{
  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="id"&gt;Abstractごはん&lt;/span&gt; &lt;span class="id"&gt;Createごはん&lt;/span&gt;()
  {
    &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;ごはん&lt;/span&gt;();
  }

  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;[] &lt;span class="id"&gt;Createおかず&lt;/span&gt;()
  {
    &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;[] { &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;梅干し&lt;/span&gt;() };
  }
}

&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;和風弁当Factory&lt;/span&gt; : &lt;span class="id"&gt;Abstractお弁当Factory&lt;/span&gt;
{
  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="id"&gt;Abstractごはん&lt;/span&gt; &lt;span class="id"&gt;Createごはん&lt;/span&gt;()
  {
    &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;ごま塩ごはん&lt;/span&gt;();
  }

  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;[] &lt;span class="id"&gt;Createおかず&lt;/span&gt;()
  {
    &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;[] {
      &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;梅干し&lt;/span&gt;()
      , &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;焼き鮭&lt;/span&gt;()
      , &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;煮物&lt;/span&gt;()
    };
  }
}

&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;こども弁当Factory&lt;/span&gt; : &lt;span class="id"&gt;Abstractお弁当Factory&lt;/span&gt;
{
  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="id"&gt;Abstractごはん&lt;/span&gt; &lt;span class="id"&gt;Createごはん&lt;/span&gt;()
  {
    &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;ふりかけごはん&lt;/span&gt;();
  }

  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;[] &lt;span class="id"&gt;Createおかず&lt;/span&gt;()
  {
    &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;[] {
      &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;ウインナ&lt;/span&gt;()
      , &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;玉子焼き&lt;/span&gt;()
      , &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;から揚げ&lt;/span&gt;()
    };
  }
}
&lt;/pre&gt;
&lt;h5 class="vb-header"&gt;VB Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;日の丸弁当Factory&lt;/span&gt;
  &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;Abstractお弁当Factory&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt; &lt;span class="id"&gt;Createご飯&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;Abstractごはん&lt;/span&gt;

    &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;ごはん&lt;/span&gt;()

  &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt; &lt;span class="id"&gt;Createおかず&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;()

    &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;() {&lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;梅干し&lt;/span&gt;()}

  &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;

&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;和風弁当Factory&lt;/span&gt;
  &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;Abstractお弁当Factory&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt; &lt;span class="id"&gt;Createご飯&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;Abstractごはん&lt;/span&gt;

    &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;ごま塩ごはん&lt;/span&gt;()

  &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt; &lt;span class="id"&gt;Createおかず&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;()

    &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;() { &lt;span class="id"&gt;_&lt;/span&gt;
     &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;梅干し&lt;/span&gt;() &lt;span class="id"&gt;_&lt;/span&gt;
     , &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;焼き鮭&lt;/span&gt;() &lt;span class="id"&gt;_&lt;/span&gt;
     , &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;煮物&lt;/span&gt;() &lt;span class="id"&gt;_&lt;/span&gt;
     }

  &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;

&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;こども弁当Factory&lt;/span&gt;
  &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;Abstractお弁当Factory&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt; &lt;span class="id"&gt;Createご飯&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;Abstractごはん&lt;/span&gt;

    &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;ふりかけごはん&lt;/span&gt;()

  &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt; &lt;span class="id"&gt;Createおかず&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;()

    &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;() { &lt;span class="id"&gt;_&lt;/span&gt;
     &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;ウインナ&lt;/span&gt;() &lt;span class="id"&gt;_&lt;/span&gt;
     , &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;玉子焼き&lt;/span&gt;() &lt;span class="id"&gt;_&lt;/span&gt;
     , &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;から揚げ&lt;/span&gt;() &lt;span class="id"&gt;_&lt;/span&gt;
     }

  &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;1～4.で作成したクラス群を使用する、Clientクラスを定義します。 
&lt;h5 class="cs-header"&gt;C# Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;お弁当Client&lt;/span&gt;
{
  &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="id"&gt;Abstractごはん&lt;/span&gt; &lt;span class="id"&gt;ごはん&lt;/span&gt;;
  &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;[] &lt;span class="id"&gt;おかず&lt;/span&gt;;
  &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="id"&gt;Abstractお弁当Factory&lt;/span&gt; &lt;span class="id"&gt;お弁当Factory&lt;/span&gt;;

  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="id"&gt;お弁当Client&lt;/span&gt;(&lt;span class="keyword"&gt;string&lt;/span&gt; &lt;span class="id"&gt;種類&lt;/span&gt;)
  {
    &lt;span class="keyword"&gt;if&lt;/span&gt; ( &lt;span class="id"&gt;種類&lt;/span&gt; == &lt;span class="literal"&gt;"日の丸"&lt;/span&gt; )
    {
      &lt;span class="keyword"&gt;this&lt;/span&gt;.&lt;span class="id"&gt;お弁当Factory&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;日の丸弁当Factory&lt;/span&gt;();
    }
    &lt;span class="keyword"&gt;else&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt; ( &lt;span class="id"&gt;種類&lt;/span&gt; == &lt;span class="literal"&gt;"和風"&lt;/span&gt; )
    {
      &lt;span class="keyword"&gt;this&lt;/span&gt;.&lt;span class="id"&gt;お弁当Factory&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;和風弁当Factory&lt;/span&gt;();
    }
    &lt;span class="keyword"&gt;else&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt; ( &lt;span class="id"&gt;種類&lt;/span&gt; == &lt;span class="literal"&gt;"こども"&lt;/span&gt; )
    {
      &lt;span class="keyword"&gt;this&lt;/span&gt;.&lt;span class="id"&gt;お弁当Factory&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;こども弁当Factory&lt;/span&gt;();
    }
  }

  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; &lt;span class="id"&gt;お弁当作成&lt;/span&gt;()
  {
    &lt;span class="keyword"&gt;this&lt;/span&gt;.&lt;span class="id"&gt;ごはん&lt;/span&gt; = &lt;span class="id"&gt;お弁当Factory&lt;/span&gt;.&lt;span class="id"&gt;Createごはん&lt;/span&gt;();
    &lt;span class="keyword"&gt;this&lt;/span&gt;.&lt;span class="id"&gt;おかず&lt;/span&gt; = &lt;span class="id"&gt;お弁当Factory&lt;/span&gt;.&lt;span class="id"&gt;Createおかず&lt;/span&gt;();
  }

  &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; &lt;span class="id"&gt;ToString&lt;/span&gt;()
  {
    &lt;span class="id"&gt;List&lt;/span&gt;&amp;lt;&lt;span class="keyword"&gt;string&lt;/span&gt;&amp;gt; &lt;span class="id"&gt;おかず名List&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;List&lt;/span&gt;&amp;lt;&lt;span class="keyword"&gt;string&lt;/span&gt;&amp;gt;();
    &lt;span class="keyword"&gt;foreach&lt;/span&gt; ( &lt;span class="id"&gt;Abstractおかず&lt;/span&gt; &lt;span class="id"&gt;おかず単品&lt;/span&gt; &lt;span class="keyword"&gt;in&lt;/span&gt; &lt;span class="id"&gt;おかず&lt;/span&gt; )
    {
      &lt;span class="id"&gt;おかず名List&lt;/span&gt;.&lt;span class="id"&gt;Add&lt;/span&gt;(&lt;span class="id"&gt;おかず単品&lt;/span&gt;.&lt;span class="id"&gt;名前&lt;/span&gt;);
    }
    &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="id"&gt;String&lt;/span&gt;.&lt;span class="id"&gt;Format&lt;/span&gt;(
        &lt;span class="literal"&gt;"{0}におかずとして、{1}が付いています。"&lt;/span&gt;
      , &lt;span class="id"&gt;ごはん&lt;/span&gt;.&lt;span class="id"&gt;名前&lt;/span&gt;
      , &lt;span class="id"&gt;String&lt;/span&gt;.&lt;span class="id"&gt;Join&lt;/span&gt;(&lt;span class="literal"&gt;"、"&lt;/span&gt;, &lt;span class="id"&gt;おかず名List&lt;/span&gt;.&lt;span class="id"&gt;ToArray&lt;/span&gt;())
      );
  }
}
&lt;/pre&gt;
&lt;h5 class="vb-header"&gt;VB Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;お弁当Client&lt;/span&gt;

  &lt;span class="keyword"&gt;Private&lt;/span&gt; &lt;span class="id"&gt;ごはん&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;Abstractごはん&lt;/span&gt;
  &lt;span class="keyword"&gt;Private&lt;/span&gt; &lt;span class="id"&gt;おかず&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt;()
  &lt;span class="keyword"&gt;Private&lt;/span&gt; &lt;span class="id"&gt;お弁当Factory&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;Abstractお弁当Factory&lt;/span&gt;

  &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt;(&lt;span class="keyword"&gt;ByVal&lt;/span&gt; &lt;span class="id"&gt;種類&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;)

    &lt;span class="keyword"&gt;If&lt;/span&gt; &lt;span class="id"&gt;種類&lt;/span&gt; = &lt;span class="literal"&gt;"日の丸"&lt;/span&gt; &lt;span class="keyword"&gt;Then&lt;/span&gt;

      &lt;span class="keyword"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;お弁当Factory&lt;/span&gt; = &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;日の丸弁当Factory&lt;/span&gt;()

    &lt;span class="keyword"&gt;ElseIf&lt;/span&gt; &lt;span class="id"&gt;種類&lt;/span&gt; = &lt;span class="literal"&gt;"和風"&lt;/span&gt; &lt;span class="keyword"&gt;Then&lt;/span&gt;

      &lt;span class="keyword"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;お弁当Factory&lt;/span&gt; = &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;和風弁当Factory&lt;/span&gt;()

    &lt;span class="keyword"&gt;ElseIf&lt;/span&gt; &lt;span class="id"&gt;種類&lt;/span&gt; = &lt;span class="literal"&gt;"こども"&lt;/span&gt; &lt;span class="keyword"&gt;Then&lt;/span&gt;

      &lt;span class="keyword"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;お弁当Factory&lt;/span&gt; = &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;こども弁当Factory&lt;/span&gt;()

    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;If&lt;/span&gt;

  &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="id"&gt;お弁当作成&lt;/span&gt;()

    &lt;span class="keyword"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;ごはん&lt;/span&gt; = &lt;span class="keyword"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;お弁当Factory&lt;/span&gt;.&lt;span class="id"&gt;Createご飯&lt;/span&gt;()
    &lt;span class="keyword"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;おかず&lt;/span&gt; = &lt;span class="keyword"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;お弁当Factory&lt;/span&gt;.&lt;span class="id"&gt;Createおかず&lt;/span&gt;()

  &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt; &lt;span class="id"&gt;ToString&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;

    &lt;span class="keyword"&gt;Dim&lt;/span&gt; &lt;span class="id"&gt;おかず名List&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;List&lt;/span&gt;(&lt;span class="id"&gt;Of&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;)()

    &lt;span class="keyword"&gt;For&lt;/span&gt; &lt;span class="keyword"&gt;Each&lt;/span&gt; &lt;span class="id"&gt;おかず単品&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;Abstractおかず&lt;/span&gt; &lt;span class="keyword"&gt;In&lt;/span&gt; &lt;span class="keyword"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;おかず&lt;/span&gt;

      &lt;span class="id"&gt;おかず名List&lt;/span&gt;.&lt;span class="id"&gt;Add&lt;/span&gt;(&lt;span class="id"&gt;おかず単品&lt;/span&gt;.&lt;span class="id"&gt;名前&lt;/span&gt;)

    &lt;span class="keyword"&gt;Next&lt;/span&gt;

    &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;.&lt;span class="id"&gt;Format&lt;/span&gt;( &lt;span class="id"&gt;_&lt;/span&gt;
     &lt;span class="literal"&gt;"{0}におかずとして、{1}が付いています。"&lt;/span&gt; &lt;span class="id"&gt;_&lt;/span&gt;
     , &lt;span class="id"&gt;ごはん&lt;/span&gt;.&lt;span class="id"&gt;名前&lt;/span&gt; &lt;span class="id"&gt;_&lt;/span&gt;
     , &lt;span class="keyword"&gt;String&lt;/span&gt;.&lt;span class="id"&gt;Join&lt;/span&gt;(&lt;span class="literal"&gt;"、"&lt;/span&gt;, &lt;span class="id"&gt;おかず名List&lt;/span&gt;.&lt;span class="id"&gt;ToArray&lt;/span&gt;()) &lt;span class="id"&gt;_&lt;/span&gt;
     )

  &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;
&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;上記コードを実行してみます。&lt;/p&gt;
&lt;h4&gt;実行コード&lt;/h4&gt;
&lt;h5 class="cs-header"&gt;C# Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;Program&lt;/span&gt;
{
  &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; &lt;span class="id"&gt;Main&lt;/span&gt;(&lt;span class="keyword"&gt;string&lt;/span&gt;[] &lt;span class="id"&gt;args&lt;/span&gt;)
  {
    &lt;span class="id"&gt;お弁当Client&lt;/span&gt; &lt;span class="id"&gt;client&lt;/span&gt;;

    &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"日の丸弁当："&lt;/span&gt;);
    &lt;span class="id"&gt;client&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;お弁当Client&lt;/span&gt;(&lt;span class="literal"&gt;"日の丸"&lt;/span&gt;);
    &lt;span class="id"&gt;client&lt;/span&gt;.&lt;span class="id"&gt;お弁当作成&lt;/span&gt;();
    &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="id"&gt;client&lt;/span&gt;.&lt;span class="id"&gt;ToString&lt;/span&gt;());

    &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"和風弁当："&lt;/span&gt;);
    &lt;span class="id"&gt;client&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;お弁当Client&lt;/span&gt;(&lt;span class="literal"&gt;"和風"&lt;/span&gt;);
    &lt;span class="id"&gt;client&lt;/span&gt;.&lt;span class="id"&gt;お弁当作成&lt;/span&gt;();
    &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="id"&gt;client&lt;/span&gt;.&lt;span class="id"&gt;ToString&lt;/span&gt;());

    &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"こども弁当："&lt;/span&gt;);
    &lt;span class="id"&gt;client&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;お弁当Client&lt;/span&gt;(&lt;span class="literal"&gt;"こども"&lt;/span&gt;);
    &lt;span class="id"&gt;client&lt;/span&gt;.&lt;span class="id"&gt;お弁当作成&lt;/span&gt;();
    &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="id"&gt;client&lt;/span&gt;.&lt;span class="id"&gt;ToString&lt;/span&gt;());

    &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;ReadKey&lt;/span&gt;();
  }
}
&lt;/pre&gt;
&lt;h5 class="vb-header"&gt;VB Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;Program&lt;/span&gt;

  &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Shared&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="id"&gt;Main&lt;/span&gt;(&lt;span class="keyword"&gt;ByVal&lt;/span&gt; &lt;span class="id"&gt;args&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;())

    &lt;span class="keyword"&gt;Dim&lt;/span&gt; &lt;span class="id"&gt;client&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;お弁当Client&lt;/span&gt;

    &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"日の丸弁当："&lt;/span&gt;)
    &lt;span class="id"&gt;client&lt;/span&gt; = &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;お弁当Client&lt;/span&gt;(&lt;span class="literal"&gt;"日の丸"&lt;/span&gt;)
    &lt;span class="id"&gt;client&lt;/span&gt;.&lt;span class="id"&gt;お弁当作成&lt;/span&gt;()
    &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="id"&gt;client&lt;/span&gt;.&lt;span class="id"&gt;ToString&lt;/span&gt;())

    &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"和風弁当："&lt;/span&gt;)
    &lt;span class="id"&gt;client&lt;/span&gt; = &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;お弁当Client&lt;/span&gt;(&lt;span class="literal"&gt;"和風"&lt;/span&gt;)
    &lt;span class="id"&gt;client&lt;/span&gt;.&lt;span class="id"&gt;お弁当作成&lt;/span&gt;()
    &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="id"&gt;client&lt;/span&gt;.&lt;span class="id"&gt;ToString&lt;/span&gt;())

    &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"こども弁当："&lt;/span&gt;)
    &lt;span class="id"&gt;client&lt;/span&gt; = &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;お弁当Client&lt;/span&gt;(&lt;span class="literal"&gt;"こども"&lt;/span&gt;)
    &lt;span class="id"&gt;client&lt;/span&gt;.&lt;span class="id"&gt;お弁当作成&lt;/span&gt;()
    &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="id"&gt;client&lt;/span&gt;.&lt;span class="id"&gt;ToString&lt;/span&gt;())

    &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;ReadKey&lt;/span&gt;()

  &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;
&lt;/pre&gt;
&lt;h4&gt;実行結果&lt;/h4&gt;&lt;pre class="code" style="margin-top: 0.5em"&gt;日の丸弁当：
ごはんにおかずとして、梅干しが付いています。
和風弁当：
ごま塩ごはんにおかずとして、梅干し、焼き鮭、煮物が付いています。
こども弁当：
ふりかけごはんにおかずとして、ウインナ、玉子焼き、から揚げが付いています。
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;さて、上記のコードをよく見てみると、気付くことがあります。&lt;/p&gt;
&lt;p&gt;まずは、3.で定義した抽象Factoryですが、そのメンバである製品を生成するメソッドは、前回紹介したFactory Methodパターンとなっています。&lt;/p&gt;
&lt;p&gt;また、Clientクラスの中で、抽象Factoryクラスの変数に、具象Factoryのインスタンスを切り替えて設定し、Factoryメソッドを実行している箇所は、Strategyパターンになっていますね。（この辺の話は以前&lt;a href="http://blogs.wankuma.com/nagise/archive/2008/01/25/119163.aspx" target="_blank"&gt;凪瀬さんがまとめていらっしゃいます&lt;/a&gt;のでご一読をオススメします。）&lt;/p&gt;
&lt;p&gt;このように、あるパターンの中に他のパターンが紛れている、ということもGoFパターンにはちょくちょくあるようですので、その意味、役割を考えなければいけませんね。わたしももう少し勉強します(^^; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;さて、次回はFactoryパターンについてのまとめをお送りする予定です。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/masaru/aggbug/125280.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>まさる</dc:creator><title>re: re: オブジェクト指向におけるFizzBuzz問題</title><link>http://blogs.wankuma.com/masaru/archive/2007/11/09/107220.aspx</link><pubDate>Fri, 09 Nov 2007 12:30:00 GMT</pubDate><guid>http://blogs.wankuma.com/masaru/archive/2007/11/09/107220.aspx</guid><wfw:comment>http://blogs.wankuma.com/masaru/comments/107220.aspx</wfw:comment><comments>http://blogs.wankuma.com/masaru/archive/2007/11/09/107220.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/masaru/comments/commentRss/107220.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/masaru/services/trackbacks/107220.aspx</trackback:ping><description>&lt;p&gt;＃問題→&lt;a href="http://blogs.wankuma.com/episteme/archive/2007/11/08/106927.aspx"&gt;オブジェクト指向におけるFizzBuzz問題&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;＃前回→&lt;a id="viewpost.ascx_TitleUrl" href="http://blogs.wankuma.com/masaru/archive/2007/11/08/107051.aspx"&gt;re: オブジェクト指向におけるFizzBuzz問題&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ひろえむさんのコメントにより、さらに修正。&lt;/p&gt;
&lt;h5 class="cs-header"&gt;C#&lt;/h5&gt;
&lt;pre class="code"&gt;&lt;span class="id"&gt;public&lt;/span&gt; &lt;span class="id"&gt;abstract&lt;/span&gt; &lt;span class="id"&gt;class&lt;/span&gt; &lt;span class="id"&gt;Animal&lt;/span&gt;
{
    &lt;span class="id"&gt;private&lt;/span&gt; &lt;span class="id"&gt;int&lt;/span&gt; &lt;span class="id"&gt;soundsCount&lt;/span&gt; = &lt;span class="id"&gt;1&lt;/span&gt;;

    &lt;span class="id"&gt;public&lt;/span&gt; &lt;span class="id"&gt;void&lt;/span&gt; &lt;span class="id"&gt;SetCount&lt;/span&gt;(&lt;span class="id"&gt;int&lt;/span&gt; &lt;span class="id"&gt;count&lt;/span&gt;)
    {
        &lt;span class="id"&gt;this&lt;/span&gt;.&lt;span class="id"&gt;soundsCount&lt;/span&gt; = &lt;span class="id"&gt;count&lt;/span&gt;;
    }

    &lt;span class="id"&gt;protected&lt;/span&gt; &lt;span class="id"&gt;abstract&lt;/span&gt; &lt;span class="id"&gt;string&lt;/span&gt; &lt;span class="id"&gt;SoundsString&lt;/span&gt;
    {
        &lt;span class="id"&gt;get&lt;/span&gt;;
    }

    &lt;span class="id"&gt;public&lt;/span&gt; &lt;span class="id"&gt;void&lt;/span&gt; &lt;span class="id"&gt;Sound&lt;/span&gt;()
    {
        &lt;span class="id"&gt;StringBuilder&lt;/span&gt; &lt;span class="id"&gt;sounds&lt;/span&gt; = &lt;span class="id"&gt;new&lt;/span&gt; &lt;span class="id"&gt;StringBuilder&lt;/span&gt;();
        &lt;span class="id"&gt;for&lt;/span&gt; ( &lt;span class="id"&gt;int&lt;/span&gt; &lt;span class="id"&gt;i&lt;/span&gt; = &lt;span class="id"&gt;0&lt;/span&gt;; &lt;span class="id"&gt;i&lt;/span&gt; &amp;lt; &lt;span class="id"&gt;this&lt;/span&gt;.&lt;span class="id"&gt;soundsCount&lt;/span&gt;; &lt;span class="id"&gt;i&lt;/span&gt;++ )
        {
            &lt;span class="id"&gt;sounds&lt;/span&gt;.&lt;span class="id"&gt;Append&lt;/span&gt;(&lt;span class="id"&gt;this&lt;/span&gt;.&lt;span class="id"&gt;SoundsString&lt;/span&gt;);
        }
        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="id"&gt;sounds&lt;/span&gt;.&lt;span class="id"&gt;ToString&lt;/span&gt;());
    }
}

&lt;span class="id"&gt;public&lt;/span&gt; &lt;span class="id"&gt;class&lt;/span&gt; &lt;span class="id"&gt;Cat&lt;/span&gt; : &lt;span class="id"&gt;Animal&lt;/span&gt;
{
    &lt;span class="id"&gt;protected&lt;/span&gt; &lt;span class="id"&gt;override&lt;/span&gt; &lt;span class="id"&gt;string&lt;/span&gt; &lt;span class="id"&gt;SoundsString&lt;/span&gt;
    {
        &lt;span class="id"&gt;get&lt;/span&gt;
        {
            &lt;span class="id"&gt;return&lt;/span&gt; &lt;span class="literal"&gt;&amp;quot;にゃー&amp;quot;&lt;/span&gt;;
        }
    }
}

&lt;span class="id"&gt;public&lt;/span&gt; &lt;span class="id"&gt;class&lt;/span&gt; &lt;span class="id"&gt;Dog&lt;/span&gt; : &lt;span class="id"&gt;Animal&lt;/span&gt;
{
    &lt;span class="id"&gt;protected&lt;/span&gt; &lt;span class="id"&gt;override&lt;/span&gt; &lt;span class="id"&gt;string&lt;/span&gt; &lt;span class="id"&gt;SoundsString&lt;/span&gt;
    {
        &lt;span class="id"&gt;get&lt;/span&gt;
        {
            &lt;span class="id"&gt;return&lt;/span&gt; &lt;span class="literal"&gt;&amp;quot;わん&amp;quot;&lt;/span&gt;;
        }
    }
}

&lt;span class="id"&gt;class&lt;/span&gt; &lt;span class="id"&gt;Program&lt;/span&gt;
{
    &lt;span class="id"&gt;static&lt;/span&gt; &lt;span class="id"&gt;void&lt;/span&gt; &lt;span class="id"&gt;Main&lt;/span&gt;(&lt;span class="id"&gt;string&lt;/span&gt;[] &lt;span class="id"&gt;args&lt;/span&gt;)
    {
        &lt;span class="id"&gt;Animal&lt;/span&gt; &lt;span class="id"&gt;animal&lt;/span&gt;;
        &lt;span class="id"&gt;animal&lt;/span&gt; = &lt;span class="id"&gt;new&lt;/span&gt; &lt;span class="id"&gt;Dog&lt;/span&gt;();
        &lt;span class="id"&gt;animal&lt;/span&gt;.&lt;span class="id"&gt;Sound&lt;/span&gt;();
        &lt;span class="id"&gt;animal&lt;/span&gt;.&lt;span class="id"&gt;SetCount&lt;/span&gt;(&lt;span class="id"&gt;3&lt;/span&gt;);
        &lt;span class="id"&gt;animal&lt;/span&gt;.&lt;span class="id"&gt;Sound&lt;/span&gt;();
        &lt;span class="id"&gt;animal&lt;/span&gt; = &lt;span class="id"&gt;new&lt;/span&gt; &lt;span class="id"&gt;Cat&lt;/span&gt;();
        &lt;span class="id"&gt;animal&lt;/span&gt;.&lt;span class="id"&gt;Sound&lt;/span&gt;();

        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;Read&lt;/span&gt;();
    }
}
&lt;/pre&gt;
&lt;p&gt;せっかくなのでVB版も。&lt;/p&gt;
&lt;h5 class="vb-header"&gt;VB&lt;/h5&gt;
&lt;pre class="code"&gt;&lt;span class="id"&gt;Imports&lt;/span&gt; &lt;span class="id"&gt;System&lt;/span&gt;.&lt;span class="id"&gt;Text&lt;/span&gt;

&lt;span class="id"&gt;Public&lt;/span&gt; &lt;span class="id"&gt;MustInherit&lt;/span&gt; &lt;span class="id"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;Animal&lt;/span&gt;

    &lt;span class="id"&gt;Private&lt;/span&gt; &lt;span class="id"&gt;soundsCount&lt;/span&gt; &lt;span class="id"&gt;As&lt;/span&gt; &lt;span class="id"&gt;Integer&lt;/span&gt; = &lt;span class="id"&gt;1&lt;/span&gt;

    &lt;span class="id"&gt;Protected&lt;/span&gt; &lt;span class="id"&gt;MustOverride&lt;/span&gt; &lt;span class="id"&gt;ReadOnly&lt;/span&gt; &lt;span class="id"&gt;Property&lt;/span&gt; &lt;span class="id"&gt;SoundsString&lt;/span&gt;() &lt;span class="id"&gt;As&lt;/span&gt; &lt;span class="id"&gt;String&lt;/span&gt;

    &lt;span class="id"&gt;Public&lt;/span&gt; &lt;span class="id"&gt;Sub&lt;/span&gt; &lt;span class="id"&gt;SetCount&lt;/span&gt;(&lt;span class="id"&gt;ByVal&lt;/span&gt; &lt;span class="id"&gt;count&lt;/span&gt; &lt;span class="id"&gt;As&lt;/span&gt; &lt;span class="id"&gt;Integer&lt;/span&gt;)
        &lt;span class="id"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;soundsCount&lt;/span&gt; = &lt;span class="id"&gt;count&lt;/span&gt;
    &lt;span class="id"&gt;End&lt;/span&gt; &lt;span class="id"&gt;Sub&lt;/span&gt;

    &lt;span class="id"&gt;Public&lt;/span&gt; &lt;span class="id"&gt;Sub&lt;/span&gt; &lt;span class="id"&gt;Sound&lt;/span&gt;()
        &lt;span class="id"&gt;Dim&lt;/span&gt; &lt;span class="id"&gt;sounds&lt;/span&gt; &lt;span class="id"&gt;As&lt;/span&gt; &lt;span class="id"&gt;New&lt;/span&gt; &lt;span class="id"&gt;StringBuilder&lt;/span&gt;()
        &lt;span class="id"&gt;For&lt;/span&gt; &lt;span class="id"&gt;i&lt;/span&gt; &lt;span class="id"&gt;As&lt;/span&gt; &lt;span class="id"&gt;Integer&lt;/span&gt; = &lt;span class="id"&gt;1&lt;/span&gt; &lt;span class="id"&gt;To&lt;/span&gt; &lt;span class="id"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;soundsCount&lt;/span&gt;
            &lt;span class="id"&gt;sounds&lt;/span&gt;.&lt;span class="id"&gt;Append&lt;/span&gt;(&lt;span class="id"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;SoundsString&lt;/span&gt;())
        &lt;span class="id"&gt;Next&lt;/span&gt; &lt;span class="id"&gt;i&lt;/span&gt;
        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="id"&gt;sounds&lt;/span&gt;.&lt;span class="id"&gt;ToString&lt;/span&gt;())
    &lt;span class="id"&gt;End&lt;/span&gt; &lt;span class="id"&gt;Sub&lt;/span&gt;

&lt;span class="id"&gt;End&lt;/span&gt; &lt;span class="id"&gt;Class&lt;/span&gt;

&lt;span class="id"&gt;Public&lt;/span&gt; &lt;span class="id"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;Cat&lt;/span&gt;
    &lt;span class="id"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;Animal&lt;/span&gt;

    &lt;span class="id"&gt;Protected&lt;/span&gt; &lt;span class="id"&gt;Overrides&lt;/span&gt; &lt;span class="id"&gt;ReadOnly&lt;/span&gt; &lt;span class="id"&gt;Property&lt;/span&gt; &lt;span class="id"&gt;SoundsString&lt;/span&gt;() &lt;span class="id"&gt;As&lt;/span&gt; &lt;span class="id"&gt;String&lt;/span&gt;
        &lt;span class="id"&gt;Get&lt;/span&gt;
            &lt;span class="id"&gt;Return&lt;/span&gt; &lt;span class="literal"&gt;&amp;quot;にゃー&amp;quot;&lt;/span&gt;
        &lt;span class="id"&gt;End&lt;/span&gt; &lt;span class="id"&gt;Get&lt;/span&gt;
    &lt;span class="id"&gt;End&lt;/span&gt; &lt;span class="id"&gt;Property&lt;/span&gt;

&lt;span class="id"&gt;End&lt;/span&gt; &lt;span class="id"&gt;Class&lt;/span&gt;

&lt;span class="id"&gt;Public&lt;/span&gt; &lt;span class="id"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;Dog&lt;/span&gt;
    &lt;span class="id"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;Animal&lt;/span&gt;

    &lt;span class="id"&gt;Protected&lt;/span&gt; &lt;span class="id"&gt;Overrides&lt;/span&gt; &lt;span class="id"&gt;ReadOnly&lt;/span&gt; &lt;span class="id"&gt;Property&lt;/span&gt; &lt;span class="id"&gt;SoundsString&lt;/span&gt;() &lt;span class="id"&gt;As&lt;/span&gt; &lt;span class="id"&gt;String&lt;/span&gt;
        &lt;span class="id"&gt;Get&lt;/span&gt;
            &lt;span class="id"&gt;Return&lt;/span&gt; &lt;span class="literal"&gt;&amp;quot;わん&amp;quot;&lt;/span&gt;
        &lt;span class="id"&gt;End&lt;/span&gt; &lt;span class="id"&gt;Get&lt;/span&gt;
    &lt;span class="id"&gt;End&lt;/span&gt; &lt;span class="id"&gt;Property&lt;/span&gt;

&lt;span class="id"&gt;End&lt;/span&gt; &lt;span class="id"&gt;Class&lt;/span&gt;

&lt;span class="id"&gt;Public&lt;/span&gt; &lt;span class="id"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;Program&lt;/span&gt;

    &lt;span class="id"&gt;Public&lt;/span&gt; &lt;span class="id"&gt;Shared&lt;/span&gt; &lt;span class="id"&gt;Sub&lt;/span&gt; &lt;span class="id"&gt;Main&lt;/span&gt;(&lt;span class="id"&gt;ByVal&lt;/span&gt; &lt;span class="id"&gt;args&lt;/span&gt; &lt;span class="id"&gt;As&lt;/span&gt; &lt;span class="id"&gt;String&lt;/span&gt;())

        &lt;span class="id"&gt;Dim&lt;/span&gt; &lt;span class="id"&gt;animal&lt;/span&gt; &lt;span class="id"&gt;As&lt;/span&gt; &lt;span class="id"&gt;Animal&lt;/span&gt;
        &lt;span class="id"&gt;animal&lt;/span&gt; = &lt;span class="id"&gt;New&lt;/span&gt; &lt;span class="id"&gt;Dog&lt;/span&gt;()
        &lt;span class="id"&gt;animal&lt;/span&gt;.&lt;span class="id"&gt;Sound&lt;/span&gt;()
        &lt;span class="id"&gt;animal&lt;/span&gt;.&lt;span class="id"&gt;SetCount&lt;/span&gt;(&lt;span class="id"&gt;3&lt;/span&gt;)
        &lt;span class="id"&gt;animal&lt;/span&gt;.&lt;span class="id"&gt;Sound&lt;/span&gt;()
        &lt;span class="id"&gt;animal&lt;/span&gt; = &lt;span class="id"&gt;New&lt;/span&gt; &lt;span class="id"&gt;Cat&lt;/span&gt;()
        &lt;span class="id"&gt;animal&lt;/span&gt;.&lt;span class="id"&gt;Sound&lt;/span&gt;()

        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;Read&lt;/span&gt;()

    &lt;span class="id"&gt;End&lt;/span&gt; &lt;span class="id"&gt;Sub&lt;/span&gt;

&lt;span class="id"&gt;End&lt;/span&gt; &lt;span class="id"&gt;Class&lt;/span&gt;
&lt;/pre&gt;
&lt;img src ="http://blogs.wankuma.com/masaru/aggbug/107220.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>まさる</dc:creator><title>デザインパターンを学ぶ～その１５：Factoryパターン(2)～</title><link>http://blogs.wankuma.com/masaru/archive/2007/11/07/106471.aspx</link><pubDate>Wed, 07 Nov 2007 00:57:00 GMT</pubDate><guid>http://blogs.wankuma.com/masaru/archive/2007/11/07/106471.aspx</guid><wfw:comment>http://blogs.wankuma.com/masaru/comments/106471.aspx</wfw:comment><comments>http://blogs.wankuma.com/masaru/archive/2007/11/07/106471.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.wankuma.com/masaru/comments/commentRss/106471.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/masaru/services/trackbacks/106471.aspx</trackback:ping><description>&lt;p&gt;＃色々あって間が空きましたが、ようやくこのシリーズを再開します。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;さて、&lt;a href="http://blogs.wankuma.com/masaru/archive/2007/08/28/92433.aspx"&gt;前回&lt;/a&gt;はFactoryの基本ということで、Simple Factoryを取り上げました。今回はFactory Methodパターンを取り上げます。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Factory Methodパターンはインスタンス化するクラスをサブクラスに決定させるため、インスタンス化をサブクラスに先送りできます。これにより、実際にオブジェクトを使用するクラスから具象クラスへの依存がなくなります。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;といってもよくわからないので、コードを書いてみましょう。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;まず、生成されるオブジェクトのインタフェイスとなる抽象クラスAbstractMemberを定義します。ここで、インタフェイスとは広義の意味であり、interface（VBならInterface）で定義するインタフェイスのことではありません。  &lt;h5 class="cs-header"&gt;C# Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;abstract&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;AbstractMember&lt;/span&gt;
{
    &lt;span class="keyword"&gt;protected&lt;/span&gt; &lt;span class="keyword"&gt;string&lt;/span&gt; &lt;span class="id"&gt;name&lt;/span&gt;;

    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;abstract&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; &lt;span class="id"&gt;Speak&lt;/span&gt;();
}
&lt;/pre&gt;
&lt;h5 class="vb-header"&gt;VB Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;MustInherit&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;AbstractMember&lt;/span&gt;

    &lt;span class="keyword"&gt;Protected&lt;/span&gt; &lt;span class="id"&gt;name&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;

    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;MustOverride&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="id"&gt;Speak&lt;/span&gt;()

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;AbstractMemberを継承した具象クラスMasaru, Epistemeを定義します。 
&lt;h5 class="cs-header"&gt;C# Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;Masaru&lt;/span&gt; : &lt;span class="id"&gt;AbstractMember&lt;/span&gt;
{
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="id"&gt;Masaru&lt;/span&gt;()
    {
        &lt;span class="keyword"&gt;this&lt;/span&gt;.&lt;span class="id"&gt;name&lt;/span&gt; = &lt;span class="literal"&gt;"まさる"&lt;/span&gt;;
    }

    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; &lt;span class="id"&gt;Speak&lt;/span&gt;()
    {
        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"名前は{0}です。"&lt;/span&gt;, &lt;span class="keyword"&gt;this&lt;/span&gt;.&lt;span class="id"&gt;name&lt;/span&gt;);
        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"越後のとあるSIerで働いています。"&lt;/span&gt;);
    }
}

&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;Episteme&lt;/span&gt; : &lt;span class="id"&gt;AbstractMember&lt;/span&gt;
{
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="id"&gt;Episteme&lt;/span&gt;()
    {
        &lt;span class="keyword"&gt;this&lt;/span&gt;.&lt;span class="id"&gt;name&lt;/span&gt; = &lt;span class="literal"&gt;"επιστημη"&lt;/span&gt;;
    }

    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; &lt;span class="id"&gt;Speak&lt;/span&gt;()
    {
        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"名前は{0}です。"&lt;/span&gt;, &lt;span class="keyword"&gt;this&lt;/span&gt;.&lt;span class="id"&gt;name&lt;/span&gt;);
        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"わんくま茶藝部顧問です。"&lt;/span&gt;);
    }
}
&lt;/pre&gt;
&lt;h5 class="vb-header"&gt;VB Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;Masaru&lt;/span&gt;
    &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;AbstractMember&lt;/span&gt;

    &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt;()

        &lt;span class="keyword"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;name&lt;/span&gt; = &lt;span class="literal"&gt;"まさる"&lt;/span&gt;

    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt;

    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="id"&gt;Speak&lt;/span&gt;()

        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"名前は{0}です。"&lt;/span&gt;, &lt;span class="keyword"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;name&lt;/span&gt;)
        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"越後のとあるSIerで働いています。"&lt;/span&gt;)

    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;

&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;Episteme&lt;/span&gt;
    &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;AbstractMember&lt;/span&gt;

    &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt;()

        &lt;span class="keyword"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;name&lt;/span&gt; = &lt;span class="literal"&gt;"επιστημη"&lt;/span&gt;

    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt;

    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="id"&gt;Speak&lt;/span&gt;()

        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"名前は{0}です。"&lt;/span&gt;, &lt;span class="keyword"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;name&lt;/span&gt;)
        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"わんくま茶藝部顧問です。"&lt;/span&gt;)

    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;AbstractMemberを生成するための抽象クラスAbstractCreatorを定義します。 
&lt;h5 class="cs-header"&gt;C# Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;abstract&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;AbstractCreator&lt;/span&gt;
{
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;abstract&lt;/span&gt; &lt;span class="id"&gt;AbstractMember&lt;/span&gt; &lt;span class="id"&gt;CreateMember&lt;/span&gt;();
}
&lt;/pre&gt;
&lt;h5 class="vb-header"&gt;VB Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;MustInherit&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;AbstractCreator&lt;/span&gt;

    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;MustOverride&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt; &lt;span class="id"&gt;CreateMember&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;AbstractMember&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;AbstractCreatorを継承したインスタン生成のための具象クラスNormalMemberCreator、SuperMemberCreatorを定義します。 
&lt;h5 class="cs-header"&gt;C# Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;NormalMemberCreator&lt;/span&gt; : &lt;span class="id"&gt;AbstractCreator&lt;/span&gt;
{
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="id"&gt;AbstractMember&lt;/span&gt; &lt;span class="id"&gt;CreateMember&lt;/span&gt;()
    {
        &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;Masaru&lt;/span&gt;();
    }
}

&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;SuperMemberCreator&lt;/span&gt; : &lt;span class="id"&gt;AbstractCreator&lt;/span&gt;
{
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="id"&gt;AbstractMember&lt;/span&gt; &lt;span class="id"&gt;CreateMember&lt;/span&gt;()
    {
        &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;Episteme&lt;/span&gt;();
    }
}
&lt;/pre&gt;
&lt;h5 class="vb-header"&gt;VB Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;NormalMemberCreator&lt;/span&gt;
    &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;AbstractCreator&lt;/span&gt;

    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt; &lt;span class="id"&gt;CreateMember&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;AbstractMember&lt;/span&gt;

        &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;Masaru&lt;/span&gt;()

    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;

&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;SuperMemberCreator&lt;/span&gt;
    &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;AbstractCreator&lt;/span&gt;

    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt; &lt;span class="id"&gt;CreateMember&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;AbstractMember&lt;/span&gt;

        &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;Episteme&lt;/span&gt;()

    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;
&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;以上のコードを実行してみましょう。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;実行コード&lt;/h4&gt;
&lt;h5 class="cs-header"&gt;C# Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;Program&lt;/span&gt;
{
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; &lt;span class="id"&gt;Main&lt;/span&gt;(&lt;span class="keyword"&gt;string&lt;/span&gt;[] &lt;span class="id"&gt;args&lt;/span&gt;)
    {
        {
            &lt;span class="id"&gt;NormalMemberCreator&lt;/span&gt; &lt;span class="id"&gt;memberCreator&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;NormalMemberCreator&lt;/span&gt;();
            &lt;span class="id"&gt;AbstractMember&lt;/span&gt; &lt;span class="id"&gt;member&lt;/span&gt; = &lt;span class="id"&gt;memberCreator&lt;/span&gt;.&lt;span class="id"&gt;CreateMember&lt;/span&gt;();
            &lt;span class="id"&gt;member&lt;/span&gt;.&lt;span class="id"&gt;Speak&lt;/span&gt;();
        }

        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;""&lt;/span&gt;);

        {
            &lt;span class="id"&gt;SuperMemberCreator&lt;/span&gt; &lt;span class="id"&gt;memberCreator&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;SuperMemberCreator&lt;/span&gt;();
            &lt;span class="id"&gt;AbstractMember&lt;/span&gt; &lt;span class="id"&gt;member&lt;/span&gt; = &lt;span class="id"&gt;memberCreator&lt;/span&gt;.&lt;span class="id"&gt;CreateMember&lt;/span&gt;();
            &lt;span class="id"&gt;member&lt;/span&gt;.&lt;span class="id"&gt;Speak&lt;/span&gt;();
        }

        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;Read&lt;/span&gt;();
    }
}
&lt;/pre&gt;
&lt;h5 class="vb-header"&gt;VB Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;Program&lt;/span&gt;

    &lt;span class="keyword"&gt;Private&lt;/span&gt; &lt;span class="keyword"&gt;Shared&lt;/span&gt; &lt;span class="id"&gt;Block&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;Object&lt;/span&gt; = &lt;span class="keyword"&gt;Nothing&lt;/span&gt;

    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Shared&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="id"&gt;Main&lt;/span&gt;(&lt;span class="keyword"&gt;ByVal&lt;/span&gt; &lt;span class="id"&gt;args&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;())

        &lt;span class="keyword"&gt;With&lt;/span&gt; &lt;span class="id"&gt;Block&lt;/span&gt;

            &lt;span class="keyword"&gt;Dim&lt;/span&gt; &lt;span class="id"&gt;memberCreator&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;NormalMemberCreator&lt;/span&gt;()
            &lt;span class="keyword"&gt;Dim&lt;/span&gt; &lt;span class="id"&gt;member&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;AbstractMember&lt;/span&gt; = &lt;span class="id"&gt;memberCreator&lt;/span&gt;.&lt;span class="id"&gt;CreateMember&lt;/span&gt;()
            &lt;span class="id"&gt;member&lt;/span&gt;.&lt;span class="id"&gt;Speak&lt;/span&gt;()

        &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;With&lt;/span&gt;

        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;""&lt;/span&gt;)

        &lt;span class="keyword"&gt;With&lt;/span&gt; &lt;span class="id"&gt;Block&lt;/span&gt;

            &lt;span class="keyword"&gt;Dim&lt;/span&gt; &lt;span class="id"&gt;memberCreator&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;SuperMemberCreator&lt;/span&gt;()
            &lt;span class="keyword"&gt;Dim&lt;/span&gt; &lt;span class="id"&gt;member&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;AbstractMember&lt;/span&gt; = &lt;span class="id"&gt;memberCreator&lt;/span&gt;.&lt;span class="id"&gt;CreateMember&lt;/span&gt;()
            &lt;span class="id"&gt;member&lt;/span&gt;.&lt;span class="id"&gt;Speak&lt;/span&gt;()

        &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;With&lt;/span&gt;

        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;ReadLine&lt;/span&gt;()

    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;
&lt;/pre&gt;
&lt;h4&gt;実行結果&lt;/h4&gt;&lt;pre class="code" style="margin-top: 0.5em"&gt;名前はまさるです。
越後のとあるSIerで働いています。

名前はεπιστημηです。
わんくま茶藝部顧問です。
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;上記の実行コードはSpeakメソッドを実装している具象クラスのことを知りません。これが依存性をなくしたということです。&lt;/p&gt;
&lt;p&gt;これによって何が良いのかというと、例えばMasaruクラスでなく、Torikobitoクラスに変更したい場合、実行コードに変更が必要ありません。あくまでTorikobitoクラスの追加と、NormalMemberCreatorの変更だけで済みます。&lt;/p&gt;
&lt;h4&gt;変更点&lt;/h4&gt;
&lt;h5 class="cs-header"&gt;C# Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;Torikobito&lt;/span&gt; : &lt;span class="id"&gt;AbstractMember&lt;/span&gt;
{
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="id"&gt;Torikobito&lt;/span&gt;()
    {
        &lt;span class="keyword"&gt;this&lt;/span&gt;.&lt;span class="id"&gt;name&lt;/span&gt; = &lt;span class="literal"&gt;"とりこびと"&lt;/span&gt;;
    }

    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; &lt;span class="id"&gt;Speak&lt;/span&gt;()
    {
        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"名前は{0}です。"&lt;/span&gt;, &lt;span class="keyword"&gt;this&lt;/span&gt;.&lt;span class="id"&gt;name&lt;/span&gt;);
        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"Memo(Of T)管理人です。"&lt;/span&gt;);
    }
}

&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;NormalMemberCreator&lt;/span&gt; : &lt;span class="id"&gt;AbstractCreator&lt;/span&gt;
{
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;override&lt;/span&gt; &lt;span class="id"&gt;AbstractMember&lt;/span&gt; &lt;span class="id"&gt;CreateMember&lt;/span&gt;()
    {
        &lt;span class="comment"&gt;//return new Masaru();&lt;/span&gt;
        &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;Torikobito&lt;/span&gt;();
    }
}
&lt;/pre&gt;
&lt;h5 class="vb-header"&gt;VB Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;Torikobito&lt;/span&gt;
    &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;AbstractMember&lt;/span&gt;

    &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt;()

        &lt;span class="keyword"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;name&lt;/span&gt; = &lt;span class="literal"&gt;"とりこびと"&lt;/span&gt;

    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt;

    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="id"&gt;Speak&lt;/span&gt;()

        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"名前は{0}です。"&lt;/span&gt;, &lt;span class="keyword"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;name&lt;/span&gt;)
        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"Memo(Of T)管理人です。"&lt;/span&gt;)

    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt;
&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;

&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;NormalMemberCreator&lt;/span&gt;
    &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;AbstractCreator&lt;/span&gt;

    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt; &lt;span class="id"&gt;CreateMember&lt;/span&gt;() &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;AbstractMember&lt;/span&gt;

        &lt;span class="comment"&gt;'Return New Masaru()&lt;/span&gt;
        &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;Torikobito&lt;/span&gt;()

    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;
&lt;/pre&gt;
&lt;h4&gt;実行結果&lt;/h4&gt;&lt;pre class="code" style="margin-top: 0.5em"&gt;名前はとりこびとです。
Memo(Of T)管理人です。

名前はεπιστημηです。
わんくま茶藝部顧問です。
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ということで、今回はFactory Methodパターンをお送りしましたが、私自身まだこのパターンの有用性が理解し切れていません。実際に「こんなときに使ったよ」などありましたらコメントで教えてください。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/masaru/aggbug/106471.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>まさる</dc:creator><title>デザインパターンを学ぶ～その１４：Factoryパターン(1)～</title><link>http://blogs.wankuma.com/masaru/archive/2007/08/28/92433.aspx</link><pubDate>Tue, 28 Aug 2007 22:35:00 GMT</pubDate><guid>http://blogs.wankuma.com/masaru/archive/2007/08/28/92433.aspx</guid><wfw:comment>http://blogs.wankuma.com/masaru/comments/92433.aspx</wfw:comment><comments>http://blogs.wankuma.com/masaru/archive/2007/08/28/92433.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/masaru/comments/commentRss/92433.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/masaru/services/trackbacks/92433.aspx</trackback:ping><description>&lt;blockquote&gt;&lt;strong&gt;Factory　（ファクトリー）&lt;/strong&gt;&lt;br&gt;　工場 &lt;/blockquote&gt; &lt;p&gt;Factoryパターンは、「工場」という名の通り、インスタンスを作り出すクラスを定義するパターンです。&lt;/p&gt; &lt;p&gt;このパターンを適用することにより、インスタンスの生成方法を気にすることなく使用することができるようになり、オブジェクト間の結合が"疎"になります。&lt;/p&gt; &lt;p&gt;まずはSimple Factoryからやっていきます。Simple Factoryは実際はデザインパターンではないそうですが、Factoryの簡単なイメージが得られると思います。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;では、コードを示します。&lt;/p&gt; &lt;ol&gt; &lt;li&gt;具象クラスの元となるInterfaceを定義します。  &lt;h5 class="cs-header"&gt;C# Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;code&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;interface&lt;/span&gt; &lt;span class="id"&gt;IObject&lt;/span&gt;
{
    &lt;span class="keyword"&gt;void&lt;/span&gt; &lt;span class="id"&gt;Output&lt;/span&gt;();
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h5 class="vb-header"&gt;VB Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;code&gt;&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Interface&lt;/span&gt; &lt;span class="id"&gt;IObject&lt;/span&gt;

    &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="id"&gt;Output&lt;/span&gt;()

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Interface&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;li&gt;1.のInterfaceを継承して具象クラスを定義します。 
&lt;h5 class="cs-header"&gt;C# Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;code&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;HogeObject&lt;/span&gt; : &lt;span class="id"&gt;IObject&lt;/span&gt;
{

    &lt;span class="preprocessor"&gt;#region&lt;/span&gt; &lt;span class="id"&gt;IObject&lt;/span&gt; &lt;span class="id"&gt;メンバ&lt;/span&gt;

    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; &lt;span class="id"&gt;Output&lt;/span&gt;()
    {
        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"ほげ"&lt;/span&gt;);
    }

    &lt;span class="preprocessor"&gt;#endregion&lt;/span&gt;
}

&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;FooObject&lt;/span&gt; : &lt;span class="id"&gt;IObject&lt;/span&gt;
{
    &lt;span class="preprocessor"&gt;#region&lt;/span&gt; &lt;span class="id"&gt;IObject&lt;/span&gt; &lt;span class="id"&gt;メンバ&lt;/span&gt;

    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; &lt;span class="id"&gt;Output&lt;/span&gt;()
    {
        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"ふー"&lt;/span&gt;);
    }

    &lt;span class="preprocessor"&gt;#endregion&lt;/span&gt;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h5 class="vb-header"&gt;VB Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;code&gt;&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;HogeObject&lt;/span&gt;
    &lt;span class="keyword"&gt;Implements&lt;/span&gt; &lt;span class="id"&gt;IObject&lt;/span&gt;

    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="id"&gt;Output&lt;/span&gt;() &lt;span class="keyword"&gt;Implements&lt;/span&gt; &lt;span class="id"&gt;IObject&lt;/span&gt;.&lt;span class="id"&gt;Output&lt;/span&gt;
        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"ほげ"&lt;/span&gt;)
    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;

&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;FooObject&lt;/span&gt;
    &lt;span class="keyword"&gt;Implements&lt;/span&gt; &lt;span class="id"&gt;IObject&lt;/span&gt;

    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="id"&gt;Output&lt;/span&gt;() &lt;span class="keyword"&gt;Implements&lt;/span&gt; &lt;span class="id"&gt;IObject&lt;/span&gt;.&lt;span class="id"&gt;Output&lt;/span&gt;
        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"ふー"&lt;/span&gt;)
    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;li&gt;文字列を引数とし、その値によってインスタンスを生成する具象クラスを切り替えるFactoryクラスを定義します。 
&lt;h5 class="cs-header"&gt;C# Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;code&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;SimpleFactory&lt;/span&gt;
{
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="id"&gt;IObject&lt;/span&gt; &lt;span class="id"&gt;CreateHoge&lt;/span&gt;(&lt;span class="keyword"&gt;string&lt;/span&gt; &lt;span class="id"&gt;objectName&lt;/span&gt;)
    {
        &lt;span class="keyword"&gt;if&lt;/span&gt; ( &lt;span class="id"&gt;objectName&lt;/span&gt; == &lt;span class="literal"&gt;"ほげ"&lt;/span&gt; )
        {
            &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;HogeObject&lt;/span&gt;();
        }
        &lt;span class="keyword"&gt;else&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt; ( &lt;span class="id"&gt;objectName&lt;/span&gt; == &lt;span class="literal"&gt;"ふー"&lt;/span&gt; )
        {
            &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;FooObject&lt;/span&gt;();
        }
        &lt;span class="keyword"&gt;else&lt;/span&gt;
        {
            &lt;span class="keyword"&gt;throw&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;ArgumentException&lt;/span&gt;();
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h5 class="vb-header"&gt;VB Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;code&gt;&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;SimpleFactory&lt;/span&gt;

    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt; &lt;span class="id"&gt;CreateObject&lt;/span&gt;(&lt;span class="keyword"&gt;ByVal&lt;/span&gt; &lt;span class="id"&gt;objectName&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;) &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;IObject&lt;/span&gt;

        &lt;span class="keyword"&gt;If&lt;/span&gt; &lt;span class="id"&gt;objectName&lt;/span&gt; = &lt;span class="literal"&gt;"ほげ"&lt;/span&gt; &lt;span class="keyword"&gt;Then&lt;/span&gt;

            &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;HogeObject&lt;/span&gt;()

        &lt;span class="keyword"&gt;ElseIf&lt;/span&gt; &lt;span class="id"&gt;objectName&lt;/span&gt; = &lt;span class="literal"&gt;"ふー"&lt;/span&gt; &lt;span class="keyword"&gt;Then&lt;/span&gt;

            &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;FooObject&lt;/span&gt;()

        &lt;span class="keyword"&gt;Else&lt;/span&gt;

            &lt;span class="keyword"&gt;Throw&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;ArgumentException&lt;/span&gt;()

        &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;If&lt;/span&gt;

    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;li&gt;3.のFactoryを使用するクラスを定義します。 
&lt;h5 class="cs-header"&gt;C# Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;code&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;Program&lt;/span&gt;
{
    &lt;span class="keyword"&gt;private&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="id"&gt;SimpleFactory&lt;/span&gt; &lt;span class="id"&gt;_simpleFactory&lt;/span&gt; = &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;SimpleFactory&lt;/span&gt;();

    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;static&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; &lt;span class="id"&gt;Main&lt;/span&gt;(&lt;span class="keyword"&gt;string&lt;/span&gt;[] &lt;span class="id"&gt;args&lt;/span&gt;)
    {
        &lt;span class="id"&gt;IObject&lt;/span&gt; &lt;span class="id"&gt;obj&lt;/span&gt;;

        &lt;span class="id"&gt;obj&lt;/span&gt; = &lt;span class="id"&gt;_simpleFactory&lt;/span&gt;.&lt;span class="id"&gt;CreateHoge&lt;/span&gt;(&lt;span class="literal"&gt;"ほげ"&lt;/span&gt;);

        &lt;span class="id"&gt;obj&lt;/span&gt;.&lt;span class="id"&gt;Output&lt;/span&gt;();

        &lt;span class="id"&gt;obj&lt;/span&gt; = &lt;span class="id"&gt;_simpleFactory&lt;/span&gt;.&lt;span class="id"&gt;CreateHoge&lt;/span&gt;(&lt;span class="literal"&gt;"ふー"&lt;/span&gt;);

        &lt;span class="id"&gt;obj&lt;/span&gt;.&lt;span class="id"&gt;Output&lt;/span&gt;();

        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;ReadLine&lt;/span&gt;();
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h5 class="vb-header"&gt;VB Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;code&gt;&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;Program&lt;/span&gt;

    &lt;span class="keyword"&gt;Private&lt;/span&gt; &lt;span class="keyword"&gt;Shared&lt;/span&gt; &lt;span class="id"&gt;_simpleFactory&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;SimpleFactory&lt;/span&gt;()

    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Shared&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="id"&gt;Main&lt;/span&gt;(&lt;span class="keyword"&gt;ByVal&lt;/span&gt; &lt;span class="id"&gt;args&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;())

        &lt;span class="keyword"&gt;Dim&lt;/span&gt; &lt;span class="id"&gt;obj&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;IObject&lt;/span&gt;

        &lt;span class="id"&gt;obj&lt;/span&gt; = &lt;span class="id"&gt;_simpleFactory&lt;/span&gt;.&lt;span class="id"&gt;CreateObject&lt;/span&gt;(&lt;span class="literal"&gt;"ほげ"&lt;/span&gt;)

        &lt;span class="id"&gt;obj&lt;/span&gt;.&lt;span class="id"&gt;Output&lt;/span&gt;()

        &lt;span class="id"&gt;obj&lt;/span&gt; = &lt;span class="id"&gt;_simpleFactory&lt;/span&gt;.&lt;span class="id"&gt;CreateObject&lt;/span&gt;(&lt;span class="literal"&gt;"ふー"&lt;/span&gt;)

        &lt;span class="id"&gt;obj&lt;/span&gt;.&lt;span class="id"&gt;Output&lt;/span&gt;()

        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;ReadLine&lt;/span&gt;()

    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;h4&gt;実行結果&lt;/h4&gt;&lt;pre class="code" style="margin-top: 0.5em"&gt;ほげ
ふー&lt;/pre&gt;
&lt;p&gt;こんな感じです。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;んで、どこが利点かといいますと、仮に「ほげ」、「ふー」の他に「ばー」を追加しようとしたとしましょう。&lt;/p&gt;
&lt;h5 class="cs-header"&gt;C# Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;code&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;BarObject&lt;/span&gt; : &lt;span class="id"&gt;IObject&lt;/span&gt;
{
    &lt;span class="preprocessor"&gt;#region&lt;/span&gt; &lt;span class="id"&gt;IObject&lt;/span&gt; &lt;span class="id"&gt;メンバ&lt;/span&gt;

    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;void&lt;/span&gt; &lt;span class="id"&gt;Output&lt;/span&gt;()
    {
        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"ふー"&lt;/span&gt;);
    }

    &lt;span class="preprocessor"&gt;#endregion&lt;/span&gt;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h5 class="vb-header"&gt;VB Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;code&gt;&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;BarObject&lt;/span&gt;
    &lt;span class="keyword"&gt;Implements&lt;/span&gt; &lt;span class="id"&gt;IObject&lt;/span&gt;

    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="id"&gt;Output&lt;/span&gt;() &lt;span class="keyword"&gt;Implements&lt;/span&gt; &lt;span class="id"&gt;IObject&lt;/span&gt;.&lt;span class="id"&gt;Output&lt;/span&gt;
        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="literal"&gt;"ばー"&lt;/span&gt;)
    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この際、Simple Factoryを用いている場合、Programクラスの変更は必要なく、SimpleFactoryクラスの変更だけで済みます。&lt;/p&gt;
&lt;h5 class="cs-header"&gt;C# Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;code&gt;&lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="keyword"&gt;class&lt;/span&gt; &lt;span class="id"&gt;SimpleFactory&lt;/span&gt;
{
    &lt;span class="keyword"&gt;public&lt;/span&gt; &lt;span class="id"&gt;IObject&lt;/span&gt; &lt;span class="id"&gt;CreateHoge&lt;/span&gt;(&lt;span class="keyword"&gt;string&lt;/span&gt; &lt;span class="id"&gt;objectName&lt;/span&gt;)
    {
        &lt;span class="keyword"&gt;if&lt;/span&gt; ( &lt;span class="id"&gt;objectName&lt;/span&gt; == &lt;span class="literal"&gt;"ほげ"&lt;/span&gt; )
        {
            &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;HogeObject&lt;/span&gt;();
        }
        &lt;span class="keyword"&gt;else&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt; ( &lt;span class="id"&gt;objectName&lt;/span&gt; == &lt;span class="literal"&gt;"ふー"&lt;/span&gt; )
        {
            &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;FooObject&lt;/span&gt;();
        }
        &lt;span class="keyword"&gt;else&lt;/span&gt; &lt;span class="keyword"&gt;if&lt;/span&gt; ( &lt;span class="id"&gt;objectName&lt;/span&gt; == &lt;span class="literal"&gt;"ばー"&lt;/span&gt; )    &lt;span class="comment"&gt;// ※追加した部分&lt;/span&gt;
        {
            &lt;span class="keyword"&gt;return&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;BarObject&lt;/span&gt;();
        }
        &lt;span class="keyword"&gt;else&lt;/span&gt;
        {
            &lt;span class="keyword"&gt;throw&lt;/span&gt; &lt;span class="keyword"&gt;new&lt;/span&gt; &lt;span class="id"&gt;ArgumentException&lt;/span&gt;();
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h5 class="vb-header"&gt;VB Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;SimpleFactory&lt;/span&gt;

    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt; &lt;span class="id"&gt;CreateObject&lt;/span&gt;(&lt;span class="keyword"&gt;ByVal&lt;/span&gt; &lt;span class="id"&gt;objectName&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;) &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;IObject&lt;/span&gt;

        &lt;span class="keyword"&gt;If&lt;/span&gt; &lt;span class="id"&gt;objectName&lt;/span&gt; = &lt;span class="literal"&gt;"ほげ"&lt;/span&gt; &lt;span class="keyword"&gt;Then&lt;/span&gt;

            &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;HogeObject&lt;/span&gt;()

        &lt;span class="keyword"&gt;ElseIf&lt;/span&gt; &lt;span class="id"&gt;objectName&lt;/span&gt; = &lt;span class="literal"&gt;"ふー"&lt;/span&gt; &lt;span class="keyword"&gt;Then&lt;/span&gt;

            &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;FooObject&lt;/span&gt;()

        &lt;span class="keyword"&gt;ElseIf&lt;/span&gt; &lt;span class="id"&gt;objectName&lt;/span&gt; = &lt;span class="literal"&gt;"ばー"&lt;/span&gt; &lt;span class="keyword"&gt;Then&lt;/span&gt;        &lt;span class="comment"&gt;' ※追加した部分&lt;/span&gt;

            &lt;span class="keyword"&gt;Return&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;BarObject&lt;/span&gt;()

        &lt;span class="keyword"&gt;Else&lt;/span&gt;

            &lt;span class="keyword"&gt;Throw&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;ArgumentException&lt;/span&gt;()

        &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;If&lt;/span&gt;

    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Function&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;つまり、「処理のメインとなるクラスに変更を及ぼさない」設計が可能となります。そして、これは今後エントリにするFactory Methodパターン、Abstract Factoryパターンにも共通する特徴です。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;次回はFactory Methodパターンについてまとめます。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/masaru/aggbug/92433.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>まさる</dc:creator><title>デザインパターンを学ぶ～その１３：ちょっとだけDecoratorパターン(3)～</title><link>http://blogs.wankuma.com/masaru/archive/2007/08/17/90740.aspx</link><pubDate>Fri, 17 Aug 2007 14:31:00 GMT</pubDate><guid>http://blogs.wankuma.com/masaru/archive/2007/08/17/90740.aspx</guid><wfw:comment>http://blogs.wankuma.com/masaru/comments/90740.aspx</wfw:comment><comments>http://blogs.wankuma.com/masaru/archive/2007/08/17/90740.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/masaru/comments/commentRss/90740.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/masaru/services/trackbacks/90740.aspx</trackback:ping><description>&lt;p&gt;最後にその８のVB版。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; &lt;h5 class="vb-header"&gt;VB Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;code&gt;&lt;span class="comment"&gt;' 抽象ログクラス&lt;/span&gt;
&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;MustInherit&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;AbstractLog&lt;/span&gt;

    &lt;span class="comment"&gt;' ログ出力&lt;/span&gt;
    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;MustOverride&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="id"&gt;WriteLog&lt;/span&gt;(&lt;span class="keyword"&gt;ByVal&lt;/span&gt; &lt;span class="id"&gt;logMessage&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;)

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;

&lt;span class="comment"&gt;' 標準出力ログクラス&lt;/span&gt;
&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;StandardOutputLog&lt;/span&gt;
    &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;AbstractLog&lt;/span&gt;

    &lt;span class="comment"&gt;' ログ出力&lt;/span&gt;
    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="id"&gt;WriteLog&lt;/span&gt;(&lt;span class="keyword"&gt;ByVal&lt;/span&gt; &lt;span class="id"&gt;logMessage&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;)

        &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="id"&gt;logMessage&lt;/span&gt;)

    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;

&lt;span class="comment"&gt;' デバッグ出力ログクラス&lt;/span&gt;
&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;DebugOutputLog&lt;/span&gt;
    &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;AbstractLog&lt;/span&gt;

    &lt;span class="comment"&gt;' 抽象ログ出力クラス変数&lt;/span&gt;
    &lt;span class="keyword"&gt;Private&lt;/span&gt; &lt;span class="id"&gt;_abstractLog&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;AbstractLog&lt;/span&gt;

    &lt;span class="comment"&gt;' コンストラクタ&lt;/span&gt;
    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt;(&lt;span class="keyword"&gt;ByVal&lt;/span&gt; &lt;span class="id"&gt;abstractLog&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;AbstractLog&lt;/span&gt;)

        &lt;span class="keyword"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;_abstractLog&lt;/span&gt; = &lt;span class="id"&gt;abstractLog&lt;/span&gt;

    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt;

    &lt;span class="comment"&gt;' ログ出力&lt;/span&gt;
    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="id"&gt;WriteLog&lt;/span&gt;(&lt;span class="keyword"&gt;ByVal&lt;/span&gt; &lt;span class="id"&gt;logMessage&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;)

        &lt;span class="keyword"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;_abstractLog&lt;/span&gt;.&lt;span class="id"&gt;WriteLog&lt;/span&gt;(&lt;span class="id"&gt;logMessage&lt;/span&gt;)

        &lt;span class="comment"&gt;' デバッグ出力にログ出力&lt;/span&gt;
        &lt;span class="id"&gt;Debug&lt;/span&gt;.&lt;span class="id"&gt;WriteLine&lt;/span&gt;(&lt;span class="id"&gt;logMessage&lt;/span&gt;)

    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;

&lt;span class="comment"&gt;' イベントログ出力ログクラス&lt;/span&gt;
&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;EventOutputLog&lt;/span&gt;
    &lt;span class="keyword"&gt;Inherits&lt;/span&gt; &lt;span class="id"&gt;AbstractLog&lt;/span&gt;

    &lt;span class="comment"&gt;' 抽象ログ出力クラス変数&lt;/span&gt;
    &lt;span class="keyword"&gt;Private&lt;/span&gt; &lt;span class="id"&gt;_abstractLog&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;AbstractLog&lt;/span&gt;

    &lt;span class="comment"&gt;' コンストラクタ&lt;/span&gt;
    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt;(&lt;span class="keyword"&gt;ByVal&lt;/span&gt; &lt;span class="id"&gt;abstractLog&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="id"&gt;AbstractLog&lt;/span&gt;)

        &lt;span class="keyword"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;_abstractLog&lt;/span&gt; = &lt;span class="id"&gt;abstractLog&lt;/span&gt;

    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt;

    &lt;span class="comment"&gt;' ログ出力&lt;/span&gt;
    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Overrides&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="id"&gt;WriteLog&lt;/span&gt;(&lt;span class="keyword"&gt;ByVal&lt;/span&gt; &lt;span class="id"&gt;logMessage&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;)

        &lt;span class="keyword"&gt;Me&lt;/span&gt;.&lt;span class="id"&gt;_abstractLog&lt;/span&gt;.&lt;span class="id"&gt;WriteLog&lt;/span&gt;(&lt;span class="id"&gt;logMessage&lt;/span&gt;)

        &lt;span class="comment"&gt;' イベントログにログ出力&lt;/span&gt;
        &lt;span class="comment"&gt;' ※イベントソースが無い場合は作成する&lt;/span&gt;
        &lt;span class="keyword"&gt;If&lt;/span&gt; &lt;span class="keyword"&gt;Not&lt;/span&gt; &lt;span class="id"&gt;EventLog&lt;/span&gt;.&lt;span class="id"&gt;SourceExists&lt;/span&gt;(&lt;span class="literal"&gt;"Masaru"&lt;/span&gt;) &lt;span class="keyword"&gt;Then&lt;/span&gt;
            &lt;span class="id"&gt;EventLog&lt;/span&gt;.&lt;span class="id"&gt;CreateEventSource&lt;/span&gt;(&lt;span class="literal"&gt;"Masaru"&lt;/span&gt;, &lt;span class="literal"&gt;"TestLog"&lt;/span&gt;)
        &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;If&lt;/span&gt;
        &lt;span class="keyword"&gt;Dim&lt;/span&gt; &lt;span class="id"&gt;eLog&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;EventLog&lt;/span&gt;()
        &lt;span class="id"&gt;eLog&lt;/span&gt;.&lt;span class="id"&gt;Source&lt;/span&gt; = &lt;span class="literal"&gt;"Masaru"&lt;/span&gt;
        &lt;span class="id"&gt;eLog&lt;/span&gt;.&lt;span class="id"&gt;WriteEntry&lt;/span&gt;(&lt;span class="id"&gt;logMessage&lt;/span&gt;)

    &lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt;

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt;

&lt;span class="comment"&gt;' 実行コード&lt;/span&gt;
&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Shared&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt; &lt;span class="id"&gt;Main&lt;/span&gt;(&lt;span class="keyword"&gt;ByVal&lt;/span&gt; &lt;span class="id"&gt;args&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;String&lt;/span&gt;())

    &lt;span class="keyword"&gt;Dim&lt;/span&gt; &lt;span class="id"&gt;stdOutLog&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;StandardOutputLog&lt;/span&gt;()

    &lt;span class="id"&gt;stdOutLog&lt;/span&gt;.&lt;span class="id"&gt;WriteLog&lt;/span&gt;(&lt;span class="literal"&gt;"まさる"&lt;/span&gt;)

    &lt;span class="keyword"&gt;Dim&lt;/span&gt; &lt;span class="id"&gt;dbgOutLog&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;DebugOutputLog&lt;/span&gt;(&lt;span class="id"&gt;stdOutLog&lt;/span&gt;)

    &lt;span class="id"&gt;dbgOutLog&lt;/span&gt;.&lt;span class="id"&gt;WriteLog&lt;/span&gt;(&lt;span class="literal"&gt;"＠わんくま同盟"&lt;/span&gt;)

    &lt;span class="keyword"&gt;Dim&lt;/span&gt; &lt;span class="id"&gt;evtOutLog&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;New&lt;/span&gt; &lt;span class="id"&gt;EventOutputLog&lt;/span&gt;(&lt;span class="id"&gt;dbgOutLog&lt;/span&gt;)

    &lt;span class="id"&gt;evtOutLog&lt;/span&gt;.&lt;span class="id"&gt;WriteLog&lt;/span&gt;(&lt;span class="literal"&gt;"＠雪国っす"&lt;/span&gt;)

    &lt;span class="id"&gt;Console&lt;/span&gt;.&lt;span class="id"&gt;ReadLine&lt;/span&gt;()

&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Sub&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
&lt;h4&gt;実行結果&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;標準出力&lt;br&gt;&lt;a href="http://masaru.wankuma.com/img/Decorator3_C605/pipeDecoratorVB_SO.jpg" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="145" alt="pipeDecoratorVB_SO" src="http://masaru.wankuma.com/img/Decorator3_C605/pipeDecoratorVB_SO_thumb.jpg" width="181" border="0"&gt;&lt;/a&gt;&lt;br&gt;
&lt;li&gt;デバッグ出力&lt;br&gt;&amp;nbsp;&lt;a href="http://masaru.wankuma.com/img/Decorator3_C605/pipeDecoratorVB_DO.jpg" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="159" alt="pipeDecoratorVB_DO" src="http://masaru.wankuma.com/img/Decorator3_C605/pipeDecoratorVB_DO_thumb.jpg" width="250" border="0"&gt;&lt;/a&gt;&lt;br&gt;
&lt;li&gt;イベントログ&lt;br&gt;&lt;a href="http://masaru.wankuma.com/img/Decorator3_C605/pipeDecoratorVB_EO.jpg" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="423" alt="pipeDecoratorVB_EO" src="http://masaru.wankuma.com/img/Decorator3_C605/pipeDecoratorVB_EO_thumb.jpg" width="469" border="0"&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;これでひとまずC#=&amp;gt;VBの変換は終わりです。&lt;/p&gt;
&lt;p&gt;今後はC#、VBのコードを同時に掲載しつつ、このシリーズをやっていこうと思います。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/masaru/aggbug/90740.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>まさる</dc:creator><title>デザインパターンを学ぶ～その１２：ちょっとだけDecoratorパターン(2)～</title><link>http://blogs.wankuma.com/masaru/archive/2007/08/17/90739.aspx</link><pubDate>Fri, 17 Aug 2007 14:30:00 GMT</pubDate><guid>http://blogs.wankuma.com/masaru/archive/2007/08/17/90739.aspx</guid><wfw:comment>http://blogs.wankuma.com/masaru/comments/90739.aspx</wfw:comment><comments>http://blogs.wankuma.com/masaru/archive/2007/08/17/90739.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/masaru/comments/commentRss/90739.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/masaru/services/trackbacks/90739.aspx</trackback:ping><description>&lt;p&gt;続いてその７のVB版。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; &lt;h5 class="vb-header"&gt;VB Code&lt;/h5&gt;&lt;pre class="code"&gt;&lt;code&gt;&lt;span class="comment"&gt;' 性別列挙対&lt;/span&gt;
&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Enum&lt;/span&gt; &lt;span class="id"&gt;Sex&lt;/span&gt;
    &lt;span class="comment"&gt;' 男&lt;/span&gt;
    &lt;span class="id"&gt;Male&lt;/span&gt;
    &lt;span class="comment"&gt;' 女&lt;/span&gt;
    &lt;span class="id"&gt;Female&lt;/span&gt;
&lt;span class="keyword"&gt;End&lt;/span&gt; &lt;span class="keyword"&gt;Enum&lt;/span&gt;

&lt;span class="comment"&gt;' 社員クラス&lt;/span&gt;
&lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="keyword"&gt;Class&lt;/span&gt; &lt;span class="id"&gt;Employee&lt;/span&gt;
    &lt;span class="comment"&gt;' 年齢&lt;/span&gt;
    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="id"&gt;Age&lt;/span&gt; &lt;span class="keyword"&gt;As&lt;/span&gt; &lt;span class="keyword"&gt;Integer&lt;/span&gt;
    &lt;span class="comment"&gt;' 性別&lt;/span&gt;
    &lt;span class="keyword"&gt;Public&lt;/span&gt; &lt;span class="id"&gt;Sex&lt;/sp