Rarestyleへようこそ
C#,デザインパターン,UML,オブジェクト指向,Webサービス,iPAQ(モバイル) アクセス数: Number_0Number_0Number_7Number_5Number_1Number_2Number_2Number_4
インデント OCPとデザインパターン
インデント サンプルコードについて
インデント デザインパターン ひとくちメモ
インデント FactoryMethodパターン
インデント AbstractFactoryパターン
インデント Builderパターン
インデント Prototypeパターン
インデント Adapterパターン
インデント Bridgeパターン
インデント Compositeパターン
インデント Decoratorパターン
インデント Facadeパターン
インデント Flyweightパターン
インデント Proxyパターン
インデント TemplateMethodパターン
インデント Chain of Responsibilityパターン
インデント Commandパターン
インデント Iteratorパターン
インデント Mediatorパターン
インデント Mementoパターン
インデント Observerパターン
インデント Stateパターン
インデント Strategyパターン
インデント Visitorパターン
インデント 速習!デザインパターン第一回
インデント 速習!デザインパターン第二回
インデント 速習!デザインパターン第三回
インデント UMLとは
インデント UML入門
インデント オブジェクト指向
インデント クラス図
インデント アクティビティ図
インデント インタラクション図
インデント ユースケース図
インデント Rarestyle証明書サービス
インデント QRコード発行WSDL
インデント QRコード発行サンプル
インデント J2EE覚書
インデント FreeMind実践レポート
インデント モバイル情報
インデント Homeページ
インデント イベント&デジタルファッション
インデント ごあいさつ・免責情報
インデント お問い合わせ
デザインパターンでキャリアアップ

TemplateMethodパターン (デザインパターン)

TemplateMethodパターン 導入

TemplateMethodパターンは、処理手順を基底クラスで定義し、処理の異なる部分を派生クラスで再定義することで多様な振る舞いを実現するものです。

TemplateMethodパターン ポイント

クラスの共通部分をテンプレートとして作成することで拡張に強い設計となります。
また、個々の処理の振る舞いの実装は多様性ポリモーフィズムで実現します。つまり個々の振る舞いは派生クラスに 閉じ込める(局所化)するということです。

UML TemplateMethodパターン

Template UML C#

C#ソースコード TemplateMethodパターン

Sample.cs

using System;

namespace TemplateMethod
{

   //---------------------------------------------------
   //      デザインパターン TempleteMethod
   //
   //      処理手順を抽象クラスで定義し、処理の異なる部分
   //      を派生クラスで定義することで、多様な振る舞いを
   //      実現するパターン
   //
   //      コメント:身近な例が一番わかりやすいかも??
   //---------------------------------------------------


   public abstract class AbstractClass_Nanpa
   {

       //お約束(定型処理)
       public void TemplateMedhod()
       {
           //ここには通常行うメソッドを登録する

           Console.WriteLine("映画を見る");
           Console.WriteLine("ドライブする");
           Console.WriteLine("食事する");
       }

       //以下のメソッドには派生クラスで行う特有の
       //処理を派生クラスで実装させることになります。
       //下記のメソッドは本来、Protectedなのですが、
       //この例ではアクセス修飾子が変更できないためPublicとします。


       //独自処理 かっこよく決める場合
       public abstract void PrimitiveOperation_CoolStyle();

       //独自処理 楽しく人柄を装う場合
       public abstract void PrimitiveOperation_FunnyStyle();
   }


   public class ConcreteClass_Kugy : AbstractClass_Nanpa
   {
       public override void PrimitiveOperation_CoolStyle()
       {
           Console.WriteLine("俺は、ダイバーだぜ、君のハートに素潜りさ!");
       }

       public override void PrimitiveOperation_FunnyStyle()
       {
           Console.WriteLine("僕って、ほんとは、おっぱい星人かも??");
       }
   }

   public class ConcreteClass_Yoshy : AbstractClass_Nanpa
   {
       public override void PrimitiveOperation_CoolStyle()
       {
           //実装なし
       }

       public override void PrimitiveOperation_FunnyStyle()
       {
           Console.WriteLine("デートプランは完璧なんだけど、だれか!僕を誘ってぇ~");
       }
   }

   /// <summary>
   /// Class1 の概要の説明です。
   /// </summary>
   class Class1
   {
       /// <summary>
       /// アプリケーションのメイン エントリ ポイントです。
       /// </summary>
       [STAThread]
       static void Main(string[] args)
       {

           Console.WriteLine("くぎちゃんの場合");

           //くぎちゃん登場
           ConcreteClass_Kugy kugi =new ConcreteClass_Kugy();

           //ナンパ開始

           //まずはいつものように
           kugi.TemplateMedhod();
           //ここで決めるぜ!!
           kugi.PrimitiveOperation_CoolStyle();
           //でも本当は。
           kugi.PrimitiveOperation_CoolStyle();

           Console.WriteLine("たかちゃんの場合");

           //たかちゃん登場
           ConcreteClass_Yoshy taka =new ConcreteClass_Yoshy();

           //ナンパ開始

           //まずはいつものように
           taka.TemplateMedhod();
           //ここで決めるぜ!!
           //
           //takao.CoolStyle();  おっと!いけねえ。私は実装しておまへんがな!!

           //しかたない!!これでどうだあ!
           taka.PrimitiveOperation_FunnyStyle();
       }
   }
}

Template 実行結果

UMLプラグインによる描画 TemplateMethodパターン

Template UML Java

Javaソースコード TemplateMethodパターン

AbstractClass_Nampa.java
   1: package templatemethod;
   2: 
   3: public abstract class AbstractClass_Nampa {
   4: 
   5:     public void templateMethod() {
   6:         //ここには通常行う処理を記述する
   7:         System.out.println("映画を見る");
   8:         System.out.println("ドライブする");
   9:         System.out.println("食事する");
  10:     }
  11: 
  12:     //独自処理の実装はサブクラスにて行う(Coolに決める場合)
  13:     public abstract void primitiveOperation_CoolStyle();
  14:     //独自処理の実装はサブクラスにて行う(楽しく人柄を装う場合)
  15:     public abstract void primitiveOperation_FunnyStyle();
  16: 
  17: }
ConcreteClass_Kugy.java
   1: package templatemethod;
   2: 
   3: public class ConcreteClass_Kugy extends AbstractClass_Nampa {
   4: 
   5:     
   6:     public void primitiveOperation_CoolStyle() {
   7:         System.out.println("俺は、ダイバーだせ、君のハートに素潜りさ");
   8:     }
   9:     public void primitiveOperation_FunnyStyle() {
  10:         System.out.println("僕って、本当はおっぱい星人かも??");
  11:     }
  12: 
  13: }
ConcreteClass_Yoshy.java
   1: package templatemethod;
   2: 
   3: public class ConcreteClass_Yoshy extends AbstractClass_Nampa {
   4: 
   5:     public void primitiveOperation_CoolStyle() {
   6:         //実装なし
   7:     }
   8:     public void primitiveOperation_FunnyStyle() {
   9:         System.out.println("デートプランは完璧なんだけど、誰か!僕をさそってぇ~!");
  10:     }
  11: }
StartClass.java
   1: package templatemethod;
   2: 
   3: public class StartClass {
   4: 
   5:     public static void main(String[] args) {
   6:         //Kugyの場合
   7:         System.out.println("くぎちゃんの場合");
   8:         //Kugyインスタンス生成
   9:         ConcreteClass_Kugy kugy =new ConcreteClass_Kugy();
  10:         
  11:         //Started NampaStory
  12:         kugy.templateMethod();
  13:         //ここで決めるぜ!
  14:         kugy.primitiveOperation_CoolStyle();
  15:         //でも本当は。
  16:         kugy.primitiveOperation_FunnyStyle();
  17:         
  18:         //Yoshyの場合
  19:         System.out.println("よっしぃちゃんの場合");
  20:         
  21:         ConcreteClass_Yoshy yoshy =new ConcreteClass_Yoshy();
  22:         //まずはいつものように
  23:         yoshy.templateMethod();
  24:         
  25:         //おっと!じっそうしておまへんがな コメントアウトしておこう
  26:         //yoshy.primitiveOperation_CoolStyle();
  27:         
  28:         //仕方が無い、これでどうだあ。
  29:         yoshy.primitiveOperation_FunnyStyle();
  30:     }
  31: }



コミュニティマーカーデザインパターン「ひとくちメモ」へ

コミュニティマーカーHomeへもどる

お天気情報
東京都 東京 - 今日の天気
晴時々曇 - リンク先
最高 最低
気温 36 28
湿度 96.8 82.4
取得日:2010/09/03 17:00:00  ST: True
東京都 東京 - 明日の天気
晴時々曇 - リンク先
最高 最低
気温 - -
湿度 - -
取得日:2010/09/03 17:00:00  ST: True
東京都 東京 - あさっての天気
曇時々晴 - リンク先
最高 最低
気温 34 27
湿度 93.2 80.6
取得日:2010/09/03 17:00:00  ST: True
大阪府 大阪 - 今日の天気
晴時々曇 - リンク先
最高 最低
気温 36 28
湿度 96.8 82.4
取得日:2010/09/03 17:00:00  ST: True
大阪府 大阪 - 明日の天気
晴時々曇 - リンク先
最高 最低
気温 36 28
湿度 96.8 82.4
取得日:2010/09/03 17:00:00  ST: True
大阪府 大阪 - あさっての天気
晴時々曇 - リンク先
最高 最低
気温 36 28
湿度 96.8 82.4
取得日:2010/09/03 17:00:00  ST: True
livedoorのWebサービスより提供
【工事中】お天気配信 ユーザー登録
Copyright 2006 Rarestyle このページへのリンクは確認不要です。
Programming by Xenon Project Team     postmaster@rarestyle.net
免責事項について
レアスタイルサイト内検索