美文网首页设计模式
第 9 章 Bridge 模式 -- 将类的功能层次结构与实现层

第 9 章 Bridge 模式 -- 将类的功能层次结构与实现层

作者: oO反骨仔Oo | 来源:发表于2018-09-06 18:18 被阅读1次
image.png

Bridge 模式

建立类的功能层次结构和类的实现层次结构之间的关系。

类的层次结构

希望增加新功能时

image.png image.png

类的功能层次结构:父类具有基本功能;在子类中增加新的功能。
【Tip】类的层次不要嵌套过深。

希望增加新的实现时

image.png image.png

类的实现层次:父类通过声明抽象方法来定义接口;子类通过实现具体方法来实现接口。

类的层次结构的混杂与分离

当类的层次结构只有一层时,功能层次结构与实现层次结构是混杂在一个层次结构中的。这样会很容易使类的层次结构变得复杂,以及难以理解。
这里通过 Bridge 把两种独立分离的类层次建立联系。

Show me the codes

namespace BridgePattern
{
    /// <summary>
    /// 显示
    /// </summary>
    internal class Display
    {
        private readonly DisplayImpl _displayImpl;

        public Display(DisplayImpl displayImpl)
        {
            _displayImpl = displayImpl;
        }

        /// <summary>
        /// 打开
        /// </summary>
        public void Open()
        {
            _displayImpl.RawOpen();
        }

        /// <summary>
        /// 打印
        /// </summary>
        public void Print()
        {
            _displayImpl.RawPrint();
        }

        /// <summary>
        /// 关闭
        /// </summary>
        public void Close()
        {
            _displayImpl.RawClose();
        }

        /// <summary>
        /// 显示
        /// </summary>
        public void Show()
        {
            Open();
            Print();
            Close();
        }
    }
}
namespace BridgePattern
{
    /// <summary>
    /// 按次数显示
    /// </summary>
    internal class CountDisplay : Display
    {
        public CountDisplay(DisplayImpl displayImpl) : base(displayImpl)
        {
        }

        /// <summary>
        /// 循环显示 times 次数
        /// </summary>
        /// <param name="times"></param>
        public void MultiDisplay(int times)
        {
            Open();
            for (var i = 0; i < times; i++)
            {
                Print();
            }

            Close();
        }
    }
}
namespace BridgePattern
{
    /// <summary>
    /// 显示
    /// </summary>
    internal abstract class DisplayImpl
    {
        /// <summary>
        /// 打开
        /// </summary>
        public abstract void RawOpen();

        /// <summary>
        /// 打印
        /// </summary>
        public abstract void RawPrint();

        /// <summary>
        /// 关闭
        /// </summary>
        public abstract void RawClose();
    }
}
using System;

namespace BridgePattern
{
    /// <summary>
    /// 字符串显示
    /// </summary>
    internal class StringDisplayImpl : DisplayImpl
    {
        private readonly string _str;

        public StringDisplayImpl(string str)
        {
            _str = str;
        }

        public override void RawOpen()
        {
            PrintLine();
        }

        public override void RawPrint()
        {
            Console.WriteLine($"|{_str}|");
        }

        public override void RawClose()
        {
            PrintLine();
        }

        /// <summary>
        /// 打印行
        /// </summary>
        private void PrintLine()
        {
            Console.Write("+");
            for (var i = 0; i < _str.Length; i++)
            {
                Console.Write("-");
            }

            Console.WriteLine("+");
        }
    }
}
namespace BridgePattern
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var d1 = new Display(new StringDisplayImpl("Hello, China."));
            Display d2 = new CountDisplay(new StringDisplayImpl("Hello, World."));
            var d3 = new CountDisplay(new StringDisplayImpl("Hello, https://360json.cn."));

            d1.Show();
            d2.Show();
            d3.Show();
            d3.MultiDisplay(5);
        }
    }
}

角色梳理

image.png

Abstraction:抽象化

该角色位于“类的功能层次结构”的最上层。使用了 Implementor 角色的方法定义基本的功能。对应示例中的 Display 类。

RefinedAbstraction:改善后的抽象化

在 Abstraction 橘色的基础上增加了新功能的角色。对应示例的 CountDisplay。

Implementor:实现者

该角色位于“类的实现层次结构”的最上层。它定义了用于实现 Abstraction 角色的接口的方法。对应示例的 DisplayImpl 类。

ConcreteImplementor:具体实现者

该角色负责实现在 Implementor 角色中定义的接口。对应示例的 StringDisplayImpl 类。

要点 & 思路

1.实现层次结构和功能层次结构分开后方便扩展;
2.继承是强关联,委托是弱关联

相关模式

Template Method 模式

Abstract Factory 模式

Adapter 模式

相关文章

  • 图解设计模式--Bridge(桥接模式)

    将类的功能层次结构与实现层次结构分离 Bridge 模式 Bridge 模式的作用是将类的功能层次结构和类的实现层...

  • 第 9 章 Bridge 模式 -- 将类的功能层次结构与实现层

    Bridge 模式 建立类的功能层次结构和类的实现层次结构之间的关系。 类的层次结构 希望增加新功能时 类的功能层...

  • Bridge(桥接)模式

    特点:了解Bridge模式需要先了解类扩展的两个维度:类的实现层次结构和类的功能层次结构。类的实现层次结构:可理解...

  • 桥接模式-原理类图

    桥接模式(Bridge)-基本介绍 桥接模式(Bridge模式)是指:将实现与抽象放在两个不同的类层次中,使两个层...

  • Bridge模式(设计模式)

    作用:将类的功能层次结构与实现层次结构分离 类的功能结构层次:父类具有基本功能,在子类中添加需要的新功能 类的实现...

  • 设计模式之桥接模式(Bridge 模式)

    类的功能层次 类的实现层次 桥接模式的具体事例 小结 Bridge的意思是桥梁,作用就是将两边连接起来。桥接模式的...

  • 22.桥接模式

    基本介绍 桥接模式(Bridge模式)是指:将实现与抽象放在两个不同的类层次中,使两个层 次可以独立改变。 是一种...

  • GoF - 结构型模式

    桥接模式(Bridge) 将抽象部分与它的实现部分分离,使它们都可以独立的变化。 Bridge将业务功能,与实现业...

  • Swift-桥接模式

    桥接模式定义将抽象部分与实现部分分离,使它们都可以独立的变化.熟悉桥接模式之前需要了解两个概念类的功能层次结构和类...

  • 结构型之二-桥模式

    Bridge(桥模式) 把抽象层次结构从其实现中分离出来,使其能够独立改变。抽象层定义了提供客户端使用的上层抽象接...

网友评论

    本文标题:第 9 章 Bridge 模式 -- 将类的功能层次结构与实现层

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