Bridge Pattern-桥接模式

发布时间 2023-08-16 14:29:24作者: ZHIZRL

C#桥接模式(Bridge Pattern)是一种结构型设计模式,用于将抽象部分与其具体实现部分独立开来,使它们可以独立变化。

桥接模式的核心思想是在抽象部分和实现部分之间建立一个桥接(Bridge)对象,通过该桥接对象将抽象部分和实现部分连接起来。这样抽象部分和实现部分可以独立进行扩展和变化,而不会相互影响。

桥接模式通常涉及以下几个角色:

抽象部分(Abstraction):定义抽象部分的接口,并维护对实现部分对象的引用。

具体抽象部分(Concrete Abstraction):实现抽象部分的接口,并调用实现部分的方法。它通常是抽象部分的子类。

实现部分(Implementor):定义实现部分的接口,提供基本的操作方法。

具体实现部分(Concrete Implementor):实现实现部分的接口,提供具体的操作方法。它通常是实现部分的子类。

namespace BridgePattern_桥接模式
{/// <summary>
/// 定义消息发送接口
/// </summary>
    public interface IMessageSender
    {
        void SendMessage(string message);
    }
}
namespace BridgePattern_桥接模式
{/// <summary>
/// 邮件发送消息
/// </summary>
    public class Email : IMessageSender
    {
        public void SendMessage(string message)
        {
            Console.WriteLine("Sending Email: " + message);
        }
    }
}
namespace BridgePattern_桥接模式
{/// <summary>
/// 短信发送消息
/// </summary>
    public class SMS : IMessageSender
    {
        public void SendMessage(string message)
        {
            Console.WriteLine("Sending SMS: " + message);
        }
    }
}
namespace BridgePattern_桥接模式
{/// <summary>
/// 消息类型接口
/// </summary>
    public abstract class Message
    {
        protected IMessageSender messageSender;
        public Message (IMessageSender messageSender)
        {
            this.messageSender = messageSender;
        }
        public abstract void Send();
    }
}
namespace BridgePattern_桥接模式
{/// <summary>
/// 文本消息
/// </summary>
    public class TextMessage : Message
    {
        public TextMessage(IMessageSender messageSender):base(messageSender) { }
        public override void Send()
        {
            Console.WriteLine("Sending Text Message...");
            messageSender.SendMessage("This is a text message");
        }
    }
}
namespace BridgePattern_桥接模式
{/// <summary>
/// 图片消息
/// </summary>
    public class ImageMessage : Message
    {
        public ImageMessage(IMessageSender messageSender):base(messageSender) { }
        public override void Send()
        {
            Console.WriteLine("Sending Image Message...");
            messageSender.SendMessage("This is an image message");
        }
    }
}
namespace BridgePattern_桥接模式
{
    internal class Program
    {
        static void Main(string[] args)
        {
            IMessageSender messageSender1 = new Email();
            IMessageSender messageSender2 = new SMS();

            Message textMessage1 = new TextMessage(messageSender1);
            textMessage1.Send();
            Message textMessage2 = new TextMessage(messageSender2);
            textMessage2.Send();

            Message imageMessage1 = new ImageMessage(messageSender1);
            imageMessage1.Send();
            Message imageMessage2 = new ImageMessage(messageSender2);
            imageMessage2.Send();

            Console.Read();
            //消息打印
            //Sending Text Message...
            //Sending Email: This is a text message
            //Sending Text Message...
            //Sending SMS: This is a text message
            //Sending Image Message...
            //Sending Email: This is an image message
            //Sending Image Message...
            //Sending SMS: This is an image message
        }
    }
}

桥接模式的优点是能够将抽象部分和实现部分独立变化,使得它们可以独立扩展。同时,桥接模式也能降低抽象部分和实现部分之间的耦合度。但它也增加了系统的复杂性,因为需要定义抽象部分和实现部分的接口以及它们之间的桥接对象。因此,在使用桥接模式时需要谨慎考虑,并权衡利弊。