项目组的故事

时间:2024-01-22 08:50:49

 

想写这样一个系列,以真实的应用场景来引出设计模式的应用场景。

角色:小李 男 22岁 毕业一年 现职程序员
     
      老王 男 34 岁 毕业期限不详 现任项目经理
     
办公大厅里机器蜂鸣,小李都快睡着了。
老王拿着材料从经理室走回研发中心,刚走过小王身边他又回转身对小王说:“小李,有个新任务。”
小李:“哦?”
老王:“你把聊天加个记录功能”
小李:“记录在数据库里么?”
老王:“数据库与文本都记录一下。”
老王离去
小李  Coding。。。。。。。。。。。。。。。。。。。。努力奋斗中

    public abstract class MessageLog
    
{
        
public abstract void Save(string msg);
    }


    
public class DataBaseMessageLog : MessageLog
    
{
        
public override void Save(string msg)
        
{
            
//
        }

    }


    
public class FileMessageLog : MessageLog
    
{
        
public override void Save(string msg)
        
{
            
//
        }

    }


N天后
老王:“公司产品策略做出调整,我们以后除了web版本还要做一个,windows版本的。你抓紧实现下你负责的那块。”
小李:。。。。。
   “老大,也是数据库跟本地都写?”
老王:“是哦”
小李(默念):天杀的啊
  public class WindowsDataBaseMessageLog : DataBaseMessageLog
    {
        public void Save(string msg)
        {
            //..................
        }
    }
    public class WindowsFileMessageLog : DataBaseMessageLog
    public class WebDataBaseMessageLog : DataBaseMessageLog
    public class WebFileMessageLog : DataBaseMessageLog
又N天后
小李调bug中
老王:“小C啊,你把聊天记录再记录份XML的。”
小李:。。。。。。。。。。“你不是说就记录两种的么。。。。。”
老王:“哦,我们要跟XXX软件集成,他们要提取咱们XML的”
小李:。。。。
  baidu:“设计 两个方向都变化”Enter
  经过数十分钟奋斗小C眼睛放光,终于发现有用的了。
  (这里引用篇文章,我就不写了NET设计模式(9):桥接模式(Bridge Pattern))
  又数十分钟
  代码整理完成

    public abstract class MessageLog
    
{
        
private MessageImplementation mode;

        
public MessageImplementation Mode
        
{
            
get return mode; }
            
set { mode = value; }
        }


        
public virtual void DumpMessage(string msg)
        
{
            mode.Save(msg);
        }

    }


    public class WindowsMessageLog : MessageLog
    
{

        
public override void DumpMessage(string msg)
        
{
            
//处理格式
            Mode.Save(msg);
        }

    }


    
public class WebMessageLog : MessageLog
    
{
        
public override void DumpMessage(string msg)
        
{
            
//处理格式
            Mode.Save(msg);
        }

    }

    
    
public abstract class  MessageImplementation
    
{
        
public abstract void Save(string msg);
    }


    
public class DataBaseImplementation : MessageImplementation
    
{
        
public override void Save(string msg)
        
{
            
//
        }

    }


    
public class FileMessageLog : MessageImplementation
    
{
        
public override void Save(string msg)
        
{
            
//
        }

    }


    
public class ClientTest
    
{
        
public void TestBridge()
        
{
            
//Write to DataBase on web form
            MessageLog ml = new WebMessageLog();
            ml.Mode 
= new DataBaseImplementation();
            ml.DumpMessage(
"text message");
        }

    }