想写这样一个系列,以真实的应用场景来引出设计模式的应用场景。
角色:小李 男 22岁 毕业一年 现职程序员
老王 男 34 岁 毕业期限不详 现任项目经理
办公大厅里机器蜂鸣,小李都快睡着了。
老王拿着材料从经理室走回研发中心,刚走过小王身边他又回转身对小王说:“小李,有个新任务。”
小李:“哦?”
老王:“你把聊天加个记录功能”
小李:“记录在数据库里么?”
老王:“数据库与文本都记录一下。”
老王离去
小李 Coding。。。。。。。。。。。。。。。。。。。。努力奋斗中
{
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))
又数十分钟
代码整理完成
{
private MessageImplementation mode;
public MessageImplementation Mode
{
get { return mode; }
set { mode = value; }
}
public virtual void DumpMessage(string msg)
{
mode.Save(msg);
}
}
{
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");
}
}