设计模式系列漫谈之十一 - 桥接模式

故事

      在小雪的追求者中,有些是身边熟悉的朋友,有些确未曾谋面的朋友。在这几个月里,小雪一直与他们保持着正常的通讯联系。可是,其中有一位男孩给她留下深刻的印象。他是一个幽默,机智,活泼,风趣的人。日子一天天过去了,小雪对他产生一种从未有过的好奇,不止一次地在脑海里勾划他的音容笑貌。

      终于有一天,小雪对他说能不能用手机发张照发给我。但是,小雪的手机只能接收来自不同手机的短信。是否有办法使小雪的手机既能接收不同手机发送的短信,也能接收不同手机发送的照片呢?

桥接模式(Bridge)的解决方案
      GOF指出,桥接模式将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化。换言之,使两个维度的变化分离。
      抽象化:存在于多个实体中的共同的概念性联系,就是抽象化。如不同的手机品牌(NOKIA、MOTOROLA)。
      实现化:抽象化给出的具体实现,就是实现化。如发送的信息类型(普通短信、彩信)
      桥接模式定义的角色:
      抽象化角色(Mobile):抽象化接口定义
      具体抽象化角色(NOKIA、MOTORALA):抽象化具体实现
      实现化角色(Type):实现化接口定义
      具体实现化角色(MessageType、PictureType):实现化角色接口的具体实现

抽象化角色如下:

namespace XiaoXue
{
      
public abstract Mobile
      {
            
public Type _type;
            
public Mobile(Type type)
            {
                  
this._type=type;
            }
            
public abstract void SendMessage(object msg);
            
public abstract void SendPictue(object pic);
      }
}

具体抽象化角色如下:

namespace XiaoXue
{
      
public class NOKIA : Mobile
      {
            
public NOKIA(Type type):base(type)
            {
            }
            
public override void SendMessage(object msg)
            {
                  
//发送NOKIA短信;
            }
            
public override void SendMessage(object msg)
            {
                   
//发送NOKIA彩信;
            }
      }

      
public class MOTOROLA : Mobile
      {
            
public MOTOROLA (Type type):base(type)
            {
            }
            
public override void SendMessage(object msg)
            {
                   
//发送MOTOROLA短信;
            }
            
public override void SendMessage(object msg)
            {
                  
//发送MOTOROLA彩信;
            }
      }
}

实现化角色如下:

namespace XiaoXue
{
      
public abstract class Type
      {
            
public abstract string GetType();
      }
}

具体实现化角色如下:

namespace XiaoXue
{
      
public class MessageType:Type
      {
            
public override string GetType()
            {
                  
return "MESSAGE";
            }
      }
      
public class PictureType:Type
      {
            
public override string GetType()
            {
                  
return "PICTURE";
            }
      }
}

客户端调用如下:

Moblile mobile=new NOKIA(new MessageType())
if (mobile.GetType()=="MESSAGE")
{
       mobile.SendMessage(
"您好");
}
posted @   李华星  阅读(437)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示