菜单命令
ShowCommand
1using System; 2using System.Collections.Generic; 3using System.Text; 4using System.Windows.Forms; 5 6namespace Gof.Test.Command 7{ 8 public class ShowCommand : System.Windows.Forms.Form 9 {10 public ShowCommand()11 {12 MenuItem exitItem = new MenuItem();13 exitItem.Text = "退出";14 exitItem.Click += new EventHandler(Excite);15 16 Menu = new MainMenu();17 Menu.MenuItems.Add(exitItem);18 }19 public void Excite(object o, EventArgs e)20 {21 Console.WriteLine("Exit");22 }23 }24}
客户代码
1System.Windows.Forms.Application.Run(new ShowCommand());2
利用命令模式提供一个服务
DataService
1using System; 2using System.Collections.Generic; 3using System.Text; 4using System.Data; 5using System.Data.OleDb; 6using System.Reflection; 7using System.IO; 8 9namespace Gof.Test.Command 10{ 11 public delegate object BorrowReader(IDataReader reader); 12 public class DataService 13 { 14 public DataService() 15 { } 16 17 public static DataTable CreateTable(string select) 18 { 19 return (DataTable) GetDataReader(select,new BorrowReader(CreateTable)); 20 } 21 22 internal static DataTable CreateTable(IDataReader reader) 23 { 24 DataTable table = new DataTable(); 25 for (int i = 0; i < reader.FieldCount; i++) 26 { 27 table.Columns.Add(reader.GetName(i), reader.GetFieldType(i)); 28 } 29 30 while (reader.Read()) 31 { 32 DataRow dr = table.NewRow(); 33 for (int i = 0; i < reader.FieldCount; i++) 34 { 35 dr[i] = reader.GetValue(i); 36 } 37 table.Rows.Add(dr); 38 } 39 return table; 40 } 41 42 public static object GetDataReader(string sel, BorrowReader borrow) 43 { 44 try 45 { 46 using (OleDbConnection con = CreateConnection()) 47 { 48 con.Open(); 49 OleDbCommand com = new OleDbCommand(); 50 com.Connection = con; 51 com.CommandText = sel; 52 OleDbDataReader reader = com.ExecuteReader(); 53 return borrow(reader); 54 } 55 } 56 catch (Exception ex) 57 { 58 throw ex;//不处理了 59 } 60 } 61 62 public static OleDbConnection CreateConnection() 63 { 64 string fileName = GetFileName("db", "oozinoz.mdb"); 65 OleDbConnection con = new OleDbConnection(); 66 con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + fileName; 67 return con; 68 } 69 70 public static String GetFileName(String dirName, String fileName) 71 { 72 String path; 73 // Can we find the file using the OOZINOZ environment variable? 74 String oozinozBase = Environment.GetEnvironmentVariable("OOZINOZ"); 75 if (oozinozBase != null) 76 { 77 path = Path.Combine(Path.Combine(oozinozBase, dirName), fileName); 78 if (File.Exists(path)) 79 { 80 return path; 81 } 82 } 83 // How 'bout relative to where the bin files are? 84 Assembly a = Assembly.GetAssembly(typeof(DataService)); 85 DirectoryInfo thisDir = Directory.GetParent(a.Location); 86 DirectoryInfo parentDir = Directory.GetParent(thisDir.FullName); 87 path = Path.Combine( 88 parentDir.FullName, 89 dirName + Path.DirectorySeparatorChar + fileName); 90 if (File.Exists(path)) 91 { 92 return path; 93 } 94 // Ok, how 'bout in the top-level directory? 95 path = Path.Combine(Path.Combine(@"\ConsoleApplication2", dirName), fileName); 96 if (File.Exists(path)) 97 { 98 return path; 99 }100 // dang101 throw new Exception("FileFinder.GetFileName() cannot find " + fileName + " in directory " + dirName);102103 }104 }105}
命令模式的钩子
命令模式钩子
1using System; 2using System.Collections.Generic; 3using System.Text; 4 5namespace Gof.Test.Command 6{ 7 public delegate void BeforDoSomething(); 8 9 public class DelegateForHook10 {11 public event BeforDoSomething befordosomething;1213 public void Begin()14 {15 Console.WriteLine("Begin");16 }1718 public void DoSomething()19 {20 Console.WriteLine("Do Something");21 }2223 public void End()24 {25 Console.WriteLine("End");26 }2728 public void DoWork()29 {30 Begin();31 if (befordosomething != null)32 {33 befordosomething();34 }35 DoSomething();36 End();37 }38 }39}
客户代码
1 DelegateForHook delegateforhook = new DelegateForHook();2 delegateforhook.befordosomething += new BeforDoSomething(MyBeforDoSomethingMethod);3 delegateforhook.DoWork();4 Console.ReadKey();
The Command Pattern encapsulates a request as an object, thereby letting you parameterize other objects with different requests, queue or log requests, and suppoert undoable operations.
转载于:https://www.cnblogs.com/nanshouyong326/archive/2007/01/12/618433.html