桥接模式-多维度拆解对象

发送消息可以看作一个功能,也可以继续拆分为怎么发消息,发什么消息两个环节。便于单独维护。

AbstractPublisher(发布消息抽象类):定义抽象行为,比如Send()发送。

Publisher(发布消执行类):用于引导消息发送上下文的,决定怎么发消息。

XXXPublisher(发布消息实现类):用于实现发送什么类型消息,决定发什么消息。

引用关系:XXXPublisher : AbstractPublisher

分析:

比起直接使用继承(接口或者基类),桥接这种方式把单一的++发消息++维度拆解成了 ++怎么发消息/发什么消息++ 两种维度,并把这两种维度在抽象层面建立联系,提高了扩展性(能独立管理两者)。

but,多维度拆解对象意味着复杂性也增加了,需要在使用时候保证多个实例正确实例化。

程序实现

using System;

namespace Bridge
{
    #region 发布消息抽象模型
    /// <summary>
    /// 消息实体
    /// </summary>
    public class Message
    {
        public string Id { get; set; }
    }

    /// <summary>
    /// 发布消息抽象类
    /// </summary>
    public abstract class AbstractPublisher
    {
        public abstract void Send(Message objMessage);
    }

    /// <summary>
    /// 发布消息类
    /// </summary>
    public class Publisher
    {
        public AbstractPublisher AbstractPublisher { get; set; }

        public virtual void Send(Message objMessage)
        {
            AbstractPublisher.Send(objMessage);
        }
    }
    #endregion

    #region 发布消息具体实现类
    /// <summary>
    /// RabbitMq发布消息类
    /// </summary>
    public class RabbitMqPublisher : AbstractPublisher
    {
        public override void Send(Message objMessage)
        {
            Console.WriteLine("RabbitMq发布消息");
        }
    }

    /// <summary>
    /// Kafka发布消息类
    /// </summary>
    public class KafkaPublisher : AbstractPublisher
    {
        public override void Send(Message objMessage)
        {
            Console.WriteLine("Kafka发布消息");
        }
    } 
    #endregion

    class Program
    {
        static void Main(string[] args)
        {
            Publisher publisher = new Publisher();

            publisher.AbstractPublisher = new RabbitMqPublisher();

            publisher.Send(new Message());

            publisher.AbstractPublisher = new KafkaPublisher();

            publisher.Send(new Message());

            Console.ReadKey();
        }
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.初识桥接模式 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 Abstraction:抽象部分的接口。...
    王侦阅读 947评论 0 7
  • 场景问题 发送消息 现在我们要实现这样一个功能:发送消息。从业务上看,消息又分成普通消息、加急消息和特急消息多种,...
    陈HHH阅读 478评论 0 0
  • 本文参考:http://www.oschina.net/question/1436074_140456 http:...
    端木轩阅读 3,631评论 0 5
  • 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设...
    于先笙阅读 526评论 1 3
  • 【学习难度:★★★☆☆,使用频率:★★★☆☆】直接出处:桥接模式梳理和学习:https://github.com/...
    BruceOuyang阅读 961评论 0 2