|
| 首页 → 程序开发 → .NET教程 |
| 阅读文章 |
设计模式-看 "泡妞之桥梁模式" 随想
今天看了十分之七的7in10笔记:泡妞之桥梁模式 , ---------- 泡妞的例子 BRIDGE —早上碰到MM,要说早上好,晚上碰到MM,要说晚上好;碰到MM穿了件新衣服,要说你的衣服好漂亮哦,碰到MM新做的发型,要说你的头发好漂亮哦。不要问我“早上碰到MM新做了个发型怎么说”这种问题,自己用BRIDGE组合一下不就行了。 --------------- 看完后想到一个问题,使用桥梁模式,按照十分之七的例子,的确可以解决“早上碰到MM新做了个发型怎么说”这种问题,但如果进一步,遇到“早上遇到MM做了个新发型,同时衣服也是一件新的”怎么办呢? 好像不好解决。 如是,按照自己的理解写了以下方案,设计代码为: 1using System; 2using System.Collections; 3using System.Data ; 4 5public class MyClass 6{ 7 public static void Main() 8 { 9 Enviroment env = EnvFactory.GeTCurrentEnv(DateTime.Now ); 10 11 MM mm = new MM( true , true ) 12 13 Me i = new Me(); 14 15 env.碰面( mm , i ); 16 17 RL(); 18 } 19 20 Helper methods#region Helper methods 21 22 private static void WL(object text, params object[] args) 23 { 24 Console.WriteLine(text.ToString(), args); 25 } 26 27 private static void RL() 28 { 29 Console.ReadLine(); 30 } 31 32 private static void Break() 33 { 34 System.Diagnostics.Debugger.Break(); 35 } 36 37 #endregion 38} 39 40public class MM 41{ 42 public MM() 43 { 44 //MMPropertyAndGoodwords.XML从动态构建MM的属性 45 } 46 47 public MM(bool is新发型 , bool is穿新衣服) 48 { 49 //动态构建MM的属性 50 51 //设置Is新发型 = is新发型; 52 //Is穿新衣服 = is穿新衣服; 53 } 54 //public bool Is卷发 = false; 55 //public bool Is穿新衣服 = false; 56} 57 58public class Me 59{ 60 public void SayToMM(Enviroment ev, MM mm) 61 { 62 SayHello(ev); 63 SayGood(); 64 } 65 66 public void SayHello(Enviroment ev) 67 { 68 Console.WriteLine ( ev.Hellowords() ); 69 } 70 71 public void SayGood(MM mm) 72 { 73 //读配置文件 74 DateSet ds = new DataSet(); 75 ds.ReadXML(Application.StartupPath + "\\MMPropertyAndGoodwords.XML"); 76 foreach( Property prt in mm.Properties) 77 { 78 if( prt == true ) 79 { 80 DataRow dr = ((DataRow[])ds.Tables[0].Select("Property='" + prt.ToString()+"'"))[0] ; 81 Console.WriteLine ( dr["赞美词"] ); 82 } 83 } 84 } 85} 86 87 88public class EnvFactory 89{ 90 public Enviroment GeTCurrentEnv(DateTime time) 91 { 92 Enviroment env = null; 93 94 switch( time.Hour) 95 { 96 case 大于0小于12 : 97 env = new Morning(); break; 98 case 大于等于12小于14 : 99 env = new Moon() ; break; 100 case 大于等于14小于18 : 101 env = new AfterNoon(); break; 102 case 大于等于18小于24 : 103 env = new Night(); break; 104 default: 105 env = new Envirpment(); 106 break; 107 } 108 } 109} 110 111public class Enviroment 112{ 113 public virtual string Hellowords() 114 { 115 } 116 117 public void 碰面(MM mm, Me i) 118 { 119 i.SayToMM(this, mm); 120 } 121} 122 123public class Night : Enviroment 124{ 125 public override string Hellowords() 126 { 127 return "晚上好!"; 128 } 129} 130 131public class Morning : Enviroment 132{ 133 public override string Hellowords() 134 { 135 return "早上好!"; 136 } 137} 138 139public class Noon : Enviroment 140{ 141 public override string Hellowords() 142 { 143 return "中午好!"; 144 } 145} 146 147public class AfterNoon : Enviroment 148{ 149 public override string Hellowords() 150 { 151 return "下午好!"; 152 } 153}部分地方,使用说明和伪码表示。 请各位指教! 附:程序文件http://www.cnblogs.com/Files/huangzhenwu/BoyMM.rar
|
| 相关文章 |
| 发表评论 |
BK网络学院主要内容:平面设计教程,网站开发在线教程,网页制作教程,服务器教程,网络编程,数据库教程等。产业部:沪ICP备05019380号 陇ICP备05004709号 公安局:GR6201030003 Copyright © BK设计 Powered by BK网络学院 |