今天看了十分之七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
 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}
部分地方,使用说明和伪码表示。

请各位指教!


附:程序文件https://files.cnblogs.com/huangzhenwu/BoyMM.rar