美文网首页.NET程序员
桥接模式-多维度拆解对象

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

作者: Carson_jz | 来源:发表于2019-12-10 21:26 被阅读0次

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

    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();
            }
        }
    }
    
    

    相关文章

      网友评论

        本文标题:桥接模式-多维度拆解对象

        本文链接:https://www.haomeiwen.com/subject/slkngctx.html