1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
using System.Windows.Forms; namespace WindowsFormsApp2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); ITarget target = new Adapter(new Adaptee()); target.Request(); // Adapteeはコンストラクタで渡さず、内部で生成している場合もある。 ITarget target2 = new Adapter2("Hello World"); target2.Request(); } } // Wrapperパターンともいう。(Adapterがラッパー) // Adapteeが実績のあるライブラリで再利用したい場合など // 基本は、Clientからは(Adapterのインスタンスを持った)Targetを利用する。 // Adapterの中ではTargetのメソッドがAdapteeのメソッドを呼んでいるということ。 public interface ITarget { void Request(); // 必要な機能 } public class Adapter : ITarget { private Adaptee adaptee; public Adapter(Adaptee target) { this.adaptee = target; } public void Request() { adaptee.AdapteeMethod(); } } public class Adaptee { public void AdapteeMethod() { // 実際に提供されている機能 } } // -------------------------------------------------------- public class Adapter2 : ITarget { private Adaptee2 adaptee2; private string extra; public Adapter2(string extra) { this.extra = extra; this.adaptee2 = new Adaptee2(); } public void Request() { MessageBox.Show(this.extra); adaptee2.Adaptee2Method(); } } public class Adaptee2 { public void Adaptee2Method() { // 実際に提供されている機能 } } } |