c#桥接模式详解

这篇具有很好参考价值的文章主要介绍了c#桥接模式详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基础介绍:

  将抽象部分与它的实现部分分离,使它们都可以独立地变化。适用于不希望在抽象和实现部分之间有固定的绑定关系的情况,或者类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充的情况。

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

  其实两个都是抽象的部分,更准确的说,是将一个事物中多个维度的变化分离

  比如不用软件运行在不同的操作系统上。

  操作系统是一个维度,分为ios、Android、Windows等。

  软件系统是一个维度,分别为微信、QQ、酷狗音乐等。

  一个维度可以认为是抽象部分,另一个维度可以认为是实现部分,而这两个维度可以独立扩充和维护。

  单独看起来比较复杂和难以理解,可以先大致看下基础结构,然后结合以下实例来解读。

  桥接模式的结构:

    Abstraction:定义抽象类的接口,一般为抽象类,规范RefinedAbstraction,并创建一个Implementor实例。主要靠这个类来进行桥接。

    RefinedAbstraction:Abstraction的子类,具体实现Abstraction里规定的方法。

    Implementor:定义实现类的接口,一般情况,Implementor接口仅为提供基本操作,而Abstraction则定义了基于基本操作的较高层次操作。

    ConcreteImplementor:Implementor的子类,具体实现Implementor接口 。

  在桥接模式中,两个类Abstraction和Implementor分别定义了抽象与行为类型的接口,通过调用子类实现抽象与行为的动态组合。

应用场景:

  适用于不希望在抽象和实现部分之间有固定的绑定关系的情况,或者类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充的情况。

创建方式:

  桥接模式的实现方式是通过在抽象类中持有一个指向实现类的引用,从而将抽象类与实现类解耦。

  通常情况下,抽象类和实现类都需要定义自己的接口,以便彼此之间进行通信。

 

实例一:不用软件运行在不同的操作系统上。

   操作系统是一个维度,分为ios、Android、Windows等。

   软件系统是一个维度,分别为微信、QQ、酷狗音乐等。

   这两个维度可以独立扩充和维护,一个维度可以认为是抽象部分,另一个维度可以认为是实现部分。

   实现部分中的接口(Implementor)只需提供基本操作,抽象部分中的接口(Abstraction)来创建一个实现接口(Implementor)实例,用这个实例将两部分紧密连续在一起。

   抽象部分也是基于这个实例才做一些较高层次的操作。

   在这里可以把操作系统当做抽象部分,把软件系统当做实现部分。

   在抽象部分中创建一个抽象类(Abstraction),该类中创建一个软件系统的实例,即实现类的实例(Implementor),并规定抽象部分具体实现类(RefinedAbstraction)要实现哪些方法。

   注:抽象类和接口主要起桥梁作用和规范作用(Abstraction和Implementor),其具体实现都在其子类中(RefinedAbstraction和ConcreteImplementor)。

   在实现部分中创建一个接口(Implementor),该接口主要规范实现类(ConcreteImplementor)需要实现的方法。

   RefinedAbstraction和ConcreteImplementor分别继承自Abstraction和Implementor,并实现其规定的方法。

   即:

     Abstraction ---》操作系统抽象类

     RefinedAbstraction---》ios、Android、Windows等具体实现

     Implementor----》软件接口类

     ConcreteImplementor---》微信、QQ、酷狗音乐等具体实现

1、软件接口类

 1     /// <summary>
 2     /// 软件接口类
 3     /// </summary>
 4     public interface ISoftWare
 5     {
 6         /// <summary>
 7         /// 定义一个软件启动方法
 8         /// </summary>
 9         void Start();
10     }

Implementor-实现类接口,只声明最基本的方法。

2、软件实现类

 1     /// <summary>
 2     /// 微信
 3     /// </summary>
 4     public class WeChat : ISoftWare
 5     {
 6         public void Start()
 7         {
 8             Console.WriteLine("启动微信");
 9         }
10     }
11 
12     /// <summary>
13     /// QQ
14     /// </summary>
15     public class TencentQQ : ISoftWare
16     {
17         public void Start()
18         {
19             Console.WriteLine("启动QQ");
20         }
21     }

ConcreteImplementor-继承自实现类接口,实现其基本方法。

3、系统抽象类

 1     /// <summary>
 2     /// 系统抽象类(桥接类)
 3     /// </summary>
 4     public abstract class SystemPlatform
 5     {
 6         //创建软件类实例
 7         public ISoftWare _softWare;
 8 
 9         //通过构造函数注入具体软件实例
10         public SystemPlatform(ISoftWare softWare)
11         {
12             this._softWare = softWare;
13         }
14 
15         //执行软件运行
16         public abstract void Run();
17     }

Abstraction-操作系统抽象类,创建一个实现类实例,用来访问实现类内的操作。

该类为实际的桥接类,其他还规范了更高一层的方法。

4、系统平台实现类

 1     /// <summary>
 2     /// ios系统
 3     /// </summary>
 4     public class IosSys : SystemPlatform
 5     {
 6         public IosSys(ISoftWare softWare) 
 7             : base(softWare)
 8         {
 9             Console.WriteLine("进入IOS系统");
10         }
11         public override void Run()
12         {
13             _softWare.Start();
14         }
15     }
16 
17     /// <summary>
18     /// Android系统
19     /// </summary>
20     public class AndroidSys : SystemPlatform
21     {
22         public AndroidSys(ISoftWare softWare)
23            : base(softWare)
24         {
25             Console.WriteLine("进入Android系统");
26         }
27         public override void Run()
28         {
29             _softWare.Start();
30         }
31     }

RefinedAbstraction-系统抽象具体实现类,实现了各个实际功能。

 5、客户端

 1     /// <summary>
 2     /// 客户端
 3     /// </summary>
 4     class Client
 5     {
 6         static void Main(string[] args)
 7         {
 8             //创建软件对象
 9             WeChat weChat = new WeChat();
10             TencentQQ tencentQQ = new TencentQQ();
11 
12             //创建操作系统并安装软件
13             SystemPlatform systemPlatform = new IosSys(weChat);
14             systemPlatform.Run();
15 
16             systemPlatform = new AndroidSys(tencentQQ);
17             systemPlatform.Run();
18 
19             Console.ReadKey();
20         }
21     }

c#桥接模式详解

这只是一个简单的实例,如果一个系统中预装载多个软件,可以将构造函数改为集合参数或者申明其他公开方法进行预安装。

 

实例二:不同形状的物体赋予不同颜色。

   不同形状的物体是一个维度,分别为长方形、矩形、圆形等。

   不同颜色是一个维度,分别为白色、黑色、红色等。

   即:

    Abstraction ---》形状抽象类

    RefinedAbstraction---》方形 圆形等具体实现

    Implementor----》颜色接口类

    ConcreteImplementor---》白色 黑色等具体实现

1、颜色接口类

1     public interface Color
2     {
3         void Bepaint();
4     }

规范颜色实现类,并供形状抽象类使用和维护。

2、颜色实现类

 1     public class White : Color
 2     {
 3         public void Bepaint()
 4         {
 5             Console.WriteLine("白色的");
 6         }
 7     }
 8 
 9     public class Gray : Color
10     {
11         public void Bepaint()
12         {
13             Console.WriteLine("灰色的");
14         }
15     }
16 
17     public class Black : Color
18     {
19         public void Bepaint()
20         {
21             Console.WriteLine("黑色的");
22         }
23     }

3、形状抽象类

1     public abstract class Shape
2     {
3         public Color color;
4         public void SetColor(Color color)
5         {
6             this.color = color;
7         }
8         public abstract void Draw();
9     }

创建颜色实例供实现类使用,并规范实现类。

这个类主要是将形状和颜色两个维度的东西联系在一起,并制定高一级的操作规范。

4、形状实现类

 1     public class Circle : Shape
 2     {
 3         public override void Draw()
 4         {
 5             color.Bepaint();
 6             Console.WriteLine("圆形");
 7         }
 8     }
 9     public class Rectangle : Shape
10     {
11 
12         public override void Draw()
13         {
14             color.Bepaint();
15             Console.WriteLine("长方形");
16         }
17     }
18     public class Square : Shape
19     {
20         public override void Draw()
21         {
22             color.Bepaint();
23             Console.WriteLine("正方形");
24         }
25     }

具体实现类

5、客户端

 1     class Client
 2     {
 3         static void Main(string[] args)
 4         {
 5             //白色
 6             Color white = new White();
 7             //正方形
 8             Shape square = new Square();
 9             //白色的正方形
10             square.SetColor(white);
11             square.Draw();
12 
13             //长方形
14             Shape rectange = new Rectangle();
15             rectange.SetColor(white);
16             rectange.Draw();
17 
18             Console.ReadKey();
19         }
20     }

c#桥接模式详解

其实颜色和形状两个维度的东西,各自维护和发展并不互相影响。

使用的时候也是将一个维度的东西加装的另一个维度上去,搭建一个桥梁供另一个维度去使用。

至于怎么加载就无所谓了,可以在构造函数中指定,也可以在方法参数中传递。

总结:

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

  桥接模式的实现方式是通过在抽象类中持有一个指向实现类的引用,从而将抽象类与实现类解耦。

  通常情况下,抽象类和实现类都需要定义自己的接口,以便彼此之间进行通信。

 

  文章来源地址https://www.toymoban.com/news/detail-746136.html

到了这里,关于c#桥接模式详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#设计模式教程(3):抽象工厂模式

    抽象工厂模式是一种创建型设计模式,它提供了一个接口,用于创建一系列相关或相互依赖对象的家族,而无需指定它们具体的类。这种模式是工厂方法模式的一种扩展,它用于创建的不是一个产品,而是多个产品的家族。 以下是C#中实现抽象工厂模式的一个简单示例: 首先

    2024年01月19日
    浏览(40)
  • 【结构型设计模式】C#设计模式之桥接模式

    题目:设计一个桥接模式来实现图形和颜色之间的解耦。 解析: 桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立变化。在这个例子中,抽象部分是图形(如圆形、正方形),实现部分是颜色(如红色、蓝色)。 我们可以使用桥接模式来解耦

    2024年02月13日
    浏览(43)
  • Python桥接模式介绍、使用

    概念:         Python桥接模式(Bridge Pattern)是一种软件设计模式,用于将抽象部分与其实现部分分离,使它们可以独立地变化。         它可以通过使用桥接接口来创建一个桥接对象来连接抽象和实现部分。 功能:          桥接模式的主要功能是将抽象部分和实

    2024年02月15日
    浏览(31)
  • Python 抽象工厂模式介绍、使用

    概念: Python 抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的方式,用于创建一系列相关或相互依赖的对象。它为客户端提供了一种创建对象的接口,而不需要指定具体实现。 功能: 抽象工厂模式提供了一种创建一系列相关或相互依赖的

    2024年02月15日
    浏览(39)
  • 设计模式详解-桥接模式

    类型:结构型模式 实现原理:将抽象类和实现类分离,使其独立,然后使用接口再将二者连接起来。 意图:将抽象部分与实现部分分离,使它们都可以独立的变化。 主要解决:类变化频繁时用继承可能会出现的类爆炸问题。 如何解决:减少类的耦合关系,让类独立变化。

    2024年02月12日
    浏览(46)
  • 设计模式——桥接模式详解

    1.1⭐桥接模式的定义 维基百科: 桥接模式 是软件设计模式中最复杂的模式之一,它把事物对象和其具体行为、具体特征分离开来,使它们可以各自独立的变化。 百度百科: 桥接模式 是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,

    2024年02月06日
    浏览(52)
  • Abstract Factory Pattern 抽象工厂模式简介与 C# 示例【创建型】【设计模式来了】

    一句话解释:   提供一个接口,以创建一系列相关或相互依赖的抽象对象,而无需指定它们具体的类。 (将一系列抽象类装进接口,一次接口实现,就必须实例化这一系列抽象类) 抽象工厂模式(Abstract Factory Pattern)是一种创建型模式。它用于创建一组相关对象的家族。

    2024年02月07日
    浏览(45)
  • 路由器里的中继模式和桥接模式的区别介绍

    本文解释无线路由器上中继模式和桥接模式的区别,中继模式和桥接模式哪个更好的问题;因为很多用户在设置迷你无线路由器的时候,发现中继模式和桥接模式的功能几乎都是一致的,搞不清楚二者之间的区别,也不知道中继模式和桥接模式到底哪个好一些。 中继模式和桥

    2024年02月08日
    浏览(39)
  • 津津乐道设计模式 - 桥接模式详解

    😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门

    2024年02月11日
    浏览(40)
  • Unity 桥接模式(实例详解)

    在Unity游戏开发中,桥接模式(Bridge Pattern)是一种设计模式,它用于将抽象部分与其实现部分分离,从而允许它们独立变化。这种模式适用于以下场景: 当一个类有多个维度的变化,并且希望这些变化可以独立扩展而不影响彼此时。 如果直接使用继承来处理多维度变化会导

    2024年01月24日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包