Rarestyleへようこそ
C#,デザインパターン,UML,オブジェクト指向,Webサービス,iPAQ(モバイル) アクセス数: Number_0Number_1Number_3Number_9Number_3Number_0Number_8Number_9
インデント 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ページ
インデント イベント&デジタルファッション
インデント ごあいさつ・免責情報
インデント お問い合わせ
デザインパターンでキャリアアップ

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

Facadeパターン 導入

Facadeパターンは、クラス群の利用者に対して窓口を提供するパターンです。 Facadeは「建物の正面、見かけ」という意味がありここを基点に窓口として機能させます。
窓口が無い場合のことを考えてみるとどうなるでしょうか?

  • 相手が多くてわからない(クラス間の相互関係を理解できるか?)
    • 誰にいえばいいのかわからない。(どのクラスを使えばよいのか?)
    • 処理手順がわからない。
  • クラスの内部構造が変更を受けるごとに、処理を組みなおす必要が生じる

窓口を置くということは、利用する側から見れば背後に処理する内容を把握しないでよいということです。 クラス間の関係が把握しずらいとき、あるいは関係が複雑になる、決められた手順で処理することが多い。 こういった場合、窓口の導入を考えてみましょう。

Facadeパターン ポイント

窓口を機能するクラスは利用するクラスのことを良く知っていますが、利用される各内部クラス群は、 窓口クラスのことを知りません。このことは内部クラス群間での依存関係の減少につなげていきます。

UML Facadeパターン

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

Sample.cs

using System;
using System.Data;
using System.IO;
using System.Collections;
namespace Facade
{
   /// <summary>
   /// FacadeSample の概要の説明です。
   /// </summary>
   /// <remarks>
   /// Facadeパターンについて
   /// クラス群の利用者に対して、窓口を提供するパターンのことです。
   /// クライアントサイドからの問い合わせを別クラスにすることで、クライアント側の利用のしやすさと
   /// 実際に処理を行うクラス群への依存度を軽減し、変更に対する局所化を実現します。
   ///</remarks>
   class FacadeSample
   {
       /// <summary>
       /// アプリケーションのメイン エントリ ポイントです。
       /// </summary>
       [STAThread]
       static void Main(string[] args)
       {
           Console.WriteLine("Facadeパターンのサンプルです");
           Console.WriteLine();
           PageMaker.MakeWelcomePage("pekepeke@ooooooxxx.co.jp","Welcome.html");
       }
   }


   public class Database
   {
       /// <summary>
       /// Databaseコンストラクタ
       /// </summary>
       /// <remarks>
       /// 外部からのアクセス不可
       /// </remarks>
       private Database()
       {
       }

       //データテーブルを取得します
       public static DataTable GetDataTable(string dbName)
       {
           string fileName =@"C:\TMP\" + dbName + ".xml";
           DataSet ds =new DataSet(dbName);
           try
           {
               ds.ReadXml(new FileInfo(fileName).FullName);
               DataColumn[] keys =new DataColumn[1];
               keys[0] =ds.Tables["
Infomation"].Columns["MailAddress"];
               ds.Tables["
Infomation"].PrimaryKey=keys;
           }
           catch(IOException /*e*/)
           {
               Console.WriteLine("
Warning: {0} is not fount.",fileName);

           }
           return ds.Tables["
Infomation"];
       }



       //------------------------------//
       //今回使用のXmlファイル      //
       //------------------------------//
       /*
       <?xml version="
1.0" encoding="utf-8" ?>
           <NewDataSet>
               <Infomation>
                   <MailAddress>marumaru@ooooooxxx.co.jp</MailAddress>
                   <UserName>marumaru</UserName>
               </Infomation>
               <Infomation>
                   <MailAddress>kakekae@ooooooxxx.co.jp</MailAddress>
                   <UserName>kakekae</UserName>
               </Infomation>
               <Infomation>
                   <MailAddress>pekepeke@ooooooxxx.co.jp</MailAddress>
                   <UserName>pekepeke</UserName>
               </Infomation>
           </NewDataSet>

       */
   }

   public class HtmlWriter
   {
       private TextWriter writer;

       /// <summary>
       /// HtmlWriterコンストラクタ
       /// </summary>
       /// <param name="
writer"></param>
       public HtmlWriter(TextWriter writer)
       {
           this.writer =writer;
       }

       //タイトルを出力します
       public void Title(string title)
       {
           writer.WriteLine("
<html>");
           writer.WriteLine("
<head>");
           writer.WriteLine("
<meta HTTP-EQUIV=\"Content-Type\" Content=\"text/html;charset=utf-8\">");
           writer.WriteLine("
<title>{0}</title>",title);
           writer.WriteLine("
</head>");
           writer.WriteLine("
<body>");
           writer.WriteLine("
<h1>{0}</h1>",title);
       }

       //段落を出力します。
       public void Paragraph(string message)
       {
           writer.WriteLine("
<p>{0}</p>",message);
       }

       //リンクを出力します
       public void Link(string href,string caption)
       {
           Paragraph(string.Format("
<span href=\"{0}\">{1}</span>",href,caption));
       }

       //メールアドレスを出力します
       public void MailTo(string mailAddress,string userName)
       {
           Link(String.Format("
mailto:{0}",mailAddress),userName);
       }

       //HTMLの出力を終えます
       public void Close()
       {
           writer.WriteLine("
</body>");
           writer.WriteLine("
</html>");
           writer.Flush();
           writer.Close();
       }

   }

   public class PageMaker
   {

       /// <summary>
       /// PageMakerクラス
       /// </summary>
       /// <remarks>
       /// 外部からのアクセス不可
       /// </remarks>
       private PageMaker()
       {
       }

       /// <summary>
       /// MakeWelcomePageメソッド
       /// </summary>
       /// <remarks>
       /// 問い合わせて作成するクラス
       /// 利用者はこのクラスを使用して、Welcome.htmlファイルを作成することになる
       /// 基本的にこのクラスを通じて、作成するにあたり、データ問い合わせ(DataBaseクラス)
       /// 、Xmlファイル書き出し(HtmlWriterクラス)などのクラスが利用されることになる。
       /// </remarks>
       public static void MakeWelcomePage(string mailAddress,string fileName)
       {
           try
           {
               DataTable dt =Database.GetDataTable("
MailData");
               string userName = (String)dt.Rows.Find(mailAddress)["
UserName"];
               HtmlWriter writer =new HtmlWriter
                                       (new StreamWriter
                                           (new FileInfo(@"
C:\TMP\"+fileName).FullName));
               writer.Paragraph(String.Format("Welcome to {0}'s page!",userName));
               writer.Paragraph("メール待ってますね!!");
               writer.MailTo(mailAddress,userName);
               writer.Close();

               Console.WriteLine("{0} is crated for {1} ({2})",
                   fileName,mailAddress,userName);
           }
           catch(IOException ex)
           {
               Console.WriteLine(ex.StackTrace);
           }
       }
   }
}

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

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

AbstractFactory.java

                        
ConcreteFactory_FirstFood.java

                        
ConcreteFactory_Kissa.java

                        
ConcreteProduct_Cake.java

                        
ConcreteProduct_Coffee.java

                        
ConcreteProduct_Drink.java

                        
ConcreteProduct_Lunch.java

                        
Product_Cafe.java

                        
Product_Restaulant.java

                        
StartClass.java

                        



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

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

お天気情報
東京都 東京 - 今日の天気
曇り - リンク先
最高 最低
気温 - -
湿度 - -
取得日:2012/02/05 17:00:00  ST: True
東京都 東京 - 明日の天気
晴のち雨 - リンク先
最高 最低
気温 9 3
湿度 48.2 37.4
取得日:2012/02/05 17:00:00  ST: True
東京都 東京 - あさっての天気
晴時々曇 - リンク先
最高 最低
気温 11 4
湿度 51.8 39.2
取得日:2012/02/05 17:00:00  ST: True
大阪府 大阪 - 今日の天気
晴のち曇 - リンク先
最高 最低
気温 - -
湿度 - -
取得日:2012/02/05 17:00:00  ST: True
大阪府 大阪 - 明日の天気
- リンク先
最高 最低
気温 11 5
湿度 51.8 41
取得日:2012/02/05 17:00:00  ST: True
大阪府 大阪 - あさっての天気
曇時々晴 - リンク先
最高 最低
気温 7 3
湿度 44.6 37.4
取得日:2012/02/05 17:00:00  ST: True
livedoorのWebサービスより提供
【工事中】お天気配信 ユーザー登録
rarestyle
Copyright 2006 Rarestyle このページへのリンクは確認不要です。
Programming by Xenon Project Team     postmaster@rarestyle.net
免責事項について
レアスタイルサイト内検索