您现在的位置:软界网技术中心软件工程项目管理工具 > 技术显示
设计模式 - Bridge Pattern(桥接模式)
2008-2-26 23:58:09   网友评论       阅读次数 点此评论
   介绍
将抽象部分与它的实现部分分离,使它们都可以独立地变化。


示例
有一个Message实体类,对它的操作有Insert()和Get()方法,现在使这些操作的抽象部分和实现部分分离。



MessageModel
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;

软件开发网 www.mscto.cn


namespacePattern.Bridge
{
///<summary>

///Message实体类
///</summary>

publicclassMessageModel
{
软件开发网 www.mscto.cn

///<summary>
软件开发网 www.mscto.cn

///构造函数
///</summary>
///<paramname="msg">Message内容</param>

///<paramname="pt">Message发布时间</param>

publicMessageModel(stringmsg,DateTimept)
{

软件开发网 www.mscto.cn


this._message=msg;
this._publishTime=pt;
}


privatestring_message;
///<summary>
软件开发网 www.mscto.com

///Message内容
///</summary>

publicstringMessage
{


get{return_message;} 软件开发网 www.mscto.cn
set{_message=value;} 软件开发网 www.mscto.cn
}


privateDateTime_publishTime;
///<summary>
///Message发布时间
///</summary>

publicDateTimePublishTime
{
get{return_publishTime;}
set{_publishTime=value;}

}

}

}


Message
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;

namespacePattern.Bridge
{

///<summary>
///操作Message(Abstraction)
///</summary>

publicclassMessage
{


privateAbstractMessage_abstractMessage;
///<summary>
///操作Message(Implementor)
///</summary>

publicAbstractMessageAbstractMessage
{
get{return_abstractMessage;} 软件开发网 www.mscto.com
set{_abstractMessage=value;}
}


///<summary>
///获取Message
///</summary>
///<returns></returns>

publicvirtualList<MessageModel>Get() 软件开发网 www.mscto.com
{
return_abstractMessage.Get();
软件开发网 www.mscto.com

}


///<summary>
///插入Message
///</summary>
///<paramname="mm">Message实体对象</param>
///<returns></returns>

publicvirtualboolInsert(MessageModelmm)
{

软件开发网 www.mscto.cn


return_abstractMessage.Insert(mm);
}

}

}


MyMessage
usingSystem;
软件开发网 www.mscto.com

usingSystem.Collections.Generic;
usingSystem.Text;

namespacePattern.Bridge
{
///<summary> 软件开发网 www.mscto.cn
///操作Message(RefinedAbstraction)
///</summary>

publicclassMyMessage:Message
{

///<summary>
///获取Message
///</summary>
///<returns></returns>

publicoverrideList<MessageModel>Get()

软件开发网 www.mscto.com


{
List
<MessageModel>l=base.Get();

foreach(MessageModelmminl)
{
mm.Message
+="(RefinedAbstraction)";
}


returnl;
}

}

}


AbstractMessage
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;



namespacePattern.Bridge
{


///<summary>
///操作Message(Implementor)
///</summary>

publicabstractclassAbstractMessage
{


///<summary>
///获取Message
///</summary>
///<returns></returns>

publicabstractList<MessageModel>Get(); 软件开发网 www.mscto.cn

///<summary>


///插入Message
///</summary>
///<paramname="mm">Message实体对象</param>


///<returns></returns>

publicabstractboolInsert(MessageModelmm);
}

}

软件开发网 www.mscto.com



SqlMessage
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;

namespacePattern.Bridge
{
///<summary>

///Sql方式操作Message(ConcreteImplementor)
///</summary>

publicclassSqlMessage:AbstractMessage
{

///<summary>

///获取Message
///</summary>
///<returns></returns>

publicoverrideList<MessageModel>Get()

软件开发网 www.mscto.com


{
List
<MessageModel>l=newList<MessageModel>();
l.Add(
newMessageModel("SQL方式获取Message",DateTime.Now));

returnl;
}


///<summary>

///插入Message
///</summary>
///<paramname="mm">Message实体对象</param>

///<returns></returns>

publicoverrideboolInsert(MessageModelmm)
{


//代码略
returntrue;
}

}

}


XmlMessage
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;

namespacePattern.Bridge
{
///<summary>
///Xml方式操作Message(ConcreteImplementor)
///</summary>

publicclassXmlMessage:AbstractMessage
{
///<summary>
///获取Message
///</summary>
///<returns></returns>

publicoverrideList<MessageModel>Get()
{
List
<MessageModel>l=newList<MessageModel>();

l.Add(
newMessageModel("XML方式获取Message",DateTime.Now));

returnl;
}

软件开发网 www.mscto.cn
///<summary>


///插入Message
///</summary>
///<paramname="mm">Message实体对象</param>


///<returns></returns>

publicoverrideboolInsert(MessageModelmm)
{


//代码略
returntrue;
}

}

}



Test
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections;
usingSystem.Web;

usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
软件开发网 www.mscto.cn

usingPattern.Bridge;

publicpartialclassBridge:System.Web.UI.Page
{

protectedvoidPage_Load(objectsender,EventArgse)
{

MyMessagem
=newMyMessage();

m.AbstractMessage
=newSqlMessage();

Response.Write(m.Insert(
newMessageModel("插入",DateTime.Now)));


Response.Write(
"<br/>");
Response.Write(m.Get()[
0].Message+""+m.Get()[0].PublishTime.ToString()); 软件开发网 www.mscto.cn
Response.Write(
"<br/>");

m.AbstractMessage
=newXmlMessage();

Response.Write(m.Insert(
newMessageModel("插入",DateTime.Now)));

Response.Write(
"<br/>");
Response.Write(m.Get()[
0].Message+""+m.Get()[0].PublishTime.ToString());

软件开发网 www.mscto.cn


}

}


运行结果
True
SQL方式获取Message(RefinedAbstraction) 2007-5-13 19:11:19
True
XML方式获取Message(RefinedAbstraction) 2007-5-13 19:11:19


OK
[源码下载]  
      来源: 作者:
 
【评论查看】