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 |
using System; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() // Main { InitializeComponent(); // Mainでオブジェクトを生成しAppに渡す。 // 作ると使うを分離する。 var obj = new Builder().CreateObj(); new App(obj).work(); // 利用側で作るをコントロールしたい場合 new App(new Builder2()).work2(); } } interface IFactory { Object CreateObj(); } // 作る側 class Builder2 : IFactory { public object CreateObj() { return new Object(); } } class Builder : IFactory { public object CreateObj() { return new Object(); } } // 使う側 class App { private object _o; public App(object o) { _o = o; } public void work() { MessageBox.Show("work"); } // -------------------------------------------------------- // Appはインスタンスを自分のタイミングで生成できる。 // 実装の詳細は管理する必要ない。 public App(IFactory f) { _o = f.CreateObj(); } public void work2() { MessageBox.Show("work2"); } } } |