设计模式(十二):桥接模式

一、定义

在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。

当一个抽象可能有多个实现时,通常用继承来进行协调。抽象类定义对该抽象的接口,而具体的子类则用不同的方式加以实现。继承机制将抽象部分与它的实现部分固定在一起,使得难以对抽象部分和实现部分独立地进行修改、扩充和重用。

如果一个抽象类或接口有多个具体实现子类,而这些子类之中有内容或概念上重叠,需要我们把抽象的共同部分各自独立开来:即原来是准备放在一个接口里,现在需要设计两个接口——抽象接口和行为接口。然后再分别针对各自的具体子类定义抽象接口和行为接口的方法和调用关系。

将抽象部分与实现部分分离,使它们都可以独立的变化。

二、实例:

在Windows系统上我们有一个写入操作,这个写入操作多重类型(txt\xml)

但是现在功能不仅仅只局限在Windows平台上,需要Mac上也要实现。并且还要增加写入类型(bit流)

抽象系统:

 public abstract class OS
    {
        public abstract void WriteTxt();
        public abstract void WriteXML();
    }

实现:

复制代码
 public class Mac : OS
    {
        public Mac()
        {
            Console.WriteLine("Mac系统");
        }
        public override void WriteTxt()
        {
            Console.WriteLine("WriteType : Txt");
        }
        public override void WriteXML()
        {
            Console.WriteLine("WriteType : XML");
        }
    }
    public class Win : OS
    {
        public Win()
        {
            Console.WriteLine("Windows 系统");
        }
        public override void WriteTxt()
        {
            Console.WriteLine("WriteType : Txt");
        }
        public override void WriteXML()
        {
            Console.WriteLine("WriteType : XML");
        }
    }
复制代码

抽象写入操作:

复制代码
 public abstract class IOHelp
    {
        public OS os;//搭个桥
        public IOHelp(OS _os)
        {
            os = _os;
        }
        public abstract void Write();
}
复制代码

实现:

复制代码
 public class TxtHelp : IOHelp
    {
        public TxtHelp(OS _os):base(_os)
        {
        }      
        public override void Write()
        {
            os.WriteTxt();
        }      
    }
    public class XMLHelp : IOHelp
    {
        public XMLHelp(OS _os) : base(_os)
        {
        }       
        public override void Write()
        {
            os.WriteXML();
        }       
    }
复制代码

客户端:

//---------------------桥接模式------------------------
            Bridge.OS mac = new Bridge.Mac();
            Bridge.IOHelp txt = new Bridge.XMLHelp(mac);
            txt.Write();
            Console.ReadKey();

三、总结

老方式:我们抽象写方式(因为有多种写类型),后续需要在不同平台运行不同的写入方式。

那就到了我们:桥接模式

抽象系统,抽象写入方式(桥接一下系统),使用系统的具体执行方法。

-----例子也是难想啊····-----

posted @   K战神  阅读(265)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示