最終更新: yamanobori_old 2010年09月21日(火) 11:18:27履歴
デザインパターン入門
デザインパターン入門
私たちはいつもゼロからプログラミングするとは限りません。既に存在しているクラスを利用することもよくあります.特にそのクラスが十分にテストされ,バグが少なく,また実際にこれまで使われてきた実績があるのならば,なおさらです.
Adapterパターンは,既存のクラスに一皮かぶせて必要とするクラスを作ります.このパターンによって,必要とするメソッド群を素早く作ることができます.
Adapterパターンは,既存のクラスに一皮かぶせて必要とするクラスを作ります.このパターンによって,必要とするメソッド群を素早く作ることができます.
- しかし,私たちは,新しいインターフェースに適合させようとするとき,つい「既存」のクラスのソースをいじって「修正」しようと考えてしまいます.でもそれでは,動作テストが済んでいる既存のクラスを,修正後にもう一度テストしなければならなくなってしまいます.
Adapterパターンは,既存のクラスには全く手を加えずに,目的のインターフェースにあわせようとするものです. - PrintBannerクラスがどういうふうに実現されているかをMainクラスは知りません。知らないということは,Mainクラスを全く変更せずにPrintBannerクラスの実装を変えられるということ.
// Banner.cs using System; namespace chap02 { public class Banner { private String str; public Banner(String str) { this.str = str; } public void showWithParen() { Console.WriteLine("(" + str + ")"); } public void showWithAstar() { Console.WriteLine("*" + str + "*"); } } } // Print.cs namespace chap02 { public interface Print { void printWeak(); void printStrong(); } } // PrintBanner.cs namespace chap02 { public class PrintBanner : Banner, Print { public PrintBanner(string str) : base(str) { } public void printWeak() { showWithParen(); } public void printStrong() { showWithAstar(); } } } // Program.cs using System; namespace chap02 { class Program { static void Main(string[] args) { Print p = new PrintBanner("Hello"); p.printWeak(); p.printStrong(); Console.Read(); } } }
// Banner.cs using System; namespace chap02 { public class Banner { private String str; public Banner(String str) { this.str = str; } public void showWithParen() { Console.WriteLine("(" + str + ")"); } public void showWithAstar() { Console.WriteLine("*" + str + "*"); } } } // Print.cs namespace chap02 { public abstract class Print { public abstract void printWeak(); public abstract void printStrong(); } } // PrintBanner.cs namespace chap02 { public class PrintBanner : Print { private Banner banner; public PrintBanner(string str) { this.banner = new Banner(str); } override public void printWeak() { banner.showWithParen(); } override public void printStrong() { banner.showWithAstar(); } } } // Program.cs using System; namespace chap02 { class Program { static void Main(string[] args) { Print p = new PrintBanner("Hello"); p.printWeak(); p.printStrong(); Console.Read(); } } }
デザインパターン入門
コメントをかく