C#编程模式之桥接模式(Bridge)

发布于:2024-04-25 ⋅ 阅读:(27) ⋅ 点赞:(0)

        创作背景:各位朋友,我们继续C#编程模式的交流,本文主要介绍桥接模式。小编查阅了很多资料,大部分文献给出的关于桥接模式的官方定义如下:是一种软设计模式,属于结构型模式,它用于将抽象部分与具体实现部分分离,以便它们可以独立地变化。这种模式通过创建一个连接(桥)来将抽象和实现部分分离,从而允许它们可以独立地进行扩展和变化。

        我自己的理解,桥接模式其实就是对产品进行“打碎”,若干个碎片都可以随意变化,然后根据需要,将变化后的所有碎片重组成一个新的产品,这就是桥接模式,它实现了解耦,非常方便产品的多元化创建。

        接下来让我们一起看代码。

        1、创建抽象产品的类

    /// <summary>
    /// 抽象制作零件的类
    /// </summary>
    public abstract class MakePart
    {
        /// <summary>
        /// 抽象制作方法
        /// </summary>
        public abstract string Making();
    }

        2、单例化抽象的产品类。

    /// <summary>
    /// 单例模式来加载当前的MakePart (sealed 封密类,不可被继承或者重写)
    /// </summary>
    public sealed class MakePartSingleton
    {
        /// <summary>
        /// 定义静态实例
        /// </summary>
        private static MakePart makePart;
        /// <summary>
        /// 构造函数,赋值给静态实例
        /// </summary>
        /// <param name="iMakePart"></param>
        public MakePartSingleton(MakePart iMakePart)
        {
            makePart = iMakePart;
        }
        /// <summary>
        /// 返回静态实例
        /// </summary>
        /// <returns></returns>
        public static MakePart Instance()
        {
            return makePart;
        }
    }

        3、创建产品接口。

    /// <summary>
    /// 零件接口
    /// </summary>
    public abstract class Part
    {
        private MakePart makePart;

        public Part()
        {
            makePart = MakePartSingleton.Instance();
        }

        public MakePart MakePart()
        {
            return this.makePart;
        }

        public abstract string Make();
    }

        4、实现抽象的产品。

    /// <summary>
    /// 白色零件
    /// </summary>
    public class WhitePart : MakePart
    {
        public override string Making()
        {
            return "白色零件";
        }
    }


    /// <summary>
    /// 黑色零件
    /// </summary>
    public class BlackPart : MakePart
    {
        public override string Making()
        {
            return "黑色零件";
        }
    }

        5、实现具体的产品。

    /// <summary>
    /// 大零件
    /// </summary>
    public class BigPart : Part
    {
        public override string Make()
        {
            MakePart makePart = this.MakePart();
            return "大号" + makePart.Making();
        }
    }

    /// <summary>
    /// 小号零件
    /// </summary>
    public class SmallPart : Part
    {
        public override string Make()
        {
            MakePart makePart = this.MakePart();
            return "小号" + makePart.Making();
        }
    }

        6、客户端调用。

        /// <summary>
        /// 桥接模式测试
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_bridge_Click(object sender, EventArgs e)
        {
            //单例变成白色属性工件
            MakePartSingleton whitePartSingleton = new MakePartSingleton(new WhitePart());

            // 大号白色零件
            BigPart bigWhitePart = new BigPart();
            tbox_bridge.Text = bigWhitePart.Make();


            // 小号白色零件
            SmallPart smallWhitePart = new SmallPart();
            tbox_bridge.Text += "\r\n" + smallWhitePart.Make();

            //单例变成黑色属性工件
            MakePartSingleton blackPartSingleton = new MakePartSingleton(new BlackPart());

            // 大号黑色零件
            BigPart bigBlackPart = new BigPart();
            tbox_bridge.Text += "\r\n" + bigBlackPart.Make();

            // 小号黑色零件
            SmallPart smallBlackPart = new SmallPart();
            tbox_bridge.Text += "\r\n" + smallBlackPart.Make();
        }

        7、调用截图如下:

        通过上述简单的例程,我们把零件的大小和颜色进行了打碎重组,进而实现桥接模式。希望能够给予各位小伙伴一定的启发。同时也接收各位大手的指正。