|
Rarestyleへようこそ
|
|
|
|
|
|
デザインパターンでキャリアアップ
|
Facadeパターン (デザインパターン)
Facadeパターン 導入
Facadeパターンは、クラス群の利用者に対して窓口を提供するパターンです。 Facadeは「建物の正面、見かけ」という意味がありここを基点に窓口として機能させます。
窓口が無い場合のことを考えてみるとどうなるでしょうか?
- 相手が多くてわからない(クラス間の相互関係を理解できるか?)
- 誰にいえばいいのかわからない。(どのクラスを使えばよいのか?)
- 処理手順がわからない。
- クラスの内部構造が変更を受けるごとに、処理を組みなおす必要が生じる
窓口を置くということは、利用する側から見れば背後に処理する内容を把握しないでよいということです。 クラス間の関係が把握しずらいとき、あるいは関係が複雑になる、決められた手順で処理することが多い。
こういった場合、窓口の導入を考えてみましょう。
Facadeパターン ポイント
窓口を機能するクラスは利用するクラスのことを良く知っていますが、利用される各内部クラス群は、 窓口クラスのことを知りません。このことは内部クラス群間での依存関係の減少につなげていきます。
UML Facadeパターン
C#ソースコード Facadeパターン
|
Sample.cs
|
|
using System;
using System.Data;
using System.IO;
using System.Collections;
namespace Facade
{
class FacadeSample
{
[STAThread]
static
void Main(string[]
args)
{
Console.WriteLine("Facadeパターンのサンプルです");
Console.WriteLine();
PageMaker.MakeWelcomePage("pekepeke@ooooooxxx.co.jp","Welcome.html");
}
}
public
class Database
{
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 |
|
|
大阪府 大阪 - 明日の天気
|
雨
-
|
|
|
|
|
取得日:2012/02/05 17:00:00
ST:
True |
|
|
大阪府 大阪 - あさっての天気
|
曇時々晴
-
|
|
|
最高
|
最低
|
| 気温
|
7 |
3 |
| 湿度
|
44.6 |
37.4 |
|
|
|
|
取得日:2012/02/05 17:00:00
ST:
True |
|
| livedoorのWebサービスより提供 |
|
【工事中】お天気配信 ユーザー登録 |
|
|
|
|
|
Internet Explorer5.0以上のご利用を推奨いたします。
|
 |
Copyright 2006 Rarestyle
このページへのリンクは確認不要です。
Programming by Xenon Project Team
postmaster@rarestyle.net
免責事項について
|