C#设计模式08——桥接模式的写法
Posted 择其通者而纳之
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#设计模式08——桥接模式的写法相关的知识,希望对你有一定的参考价值。
什么是C#桥接模式?
桥接模式是一种结构型设计模式,它可以将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过将实现细节从抽象类中分离出来,从而让它们可以根据需要独立变化。
为什么要使用C#桥接模式?
C#桥接模式的主要目的是使系统更加灵活,容易扩展和维护,同时避免类之间的紧耦合关系。
何时应该使用C#桥接模式?
当需要从一个抽象类派生出多个具体类,并且这些具体类需要在实现上有所不同,但又不能直接修改抽象类时,可以考虑使用C#桥接模式。
C#桥接模式的优点有哪些?
1. 降低了抽象与实现之间的耦合度。
2. 提高了系统的灵活性和可扩展性。
3. 对客户端隐藏了系统的实现细节,使得客户端只需要关注抽象部分。
C#桥接模式的缺点有哪些?
1. 增加了系统的复杂度。
2. 需要编写更多的代码来实现抽象和实现之间的桥接。
如何使用C#桥接模式?
可以定义一个抽象类,并在其中声明抽象方法。然后定义一个实现类,实现这些抽象方法。最后,创建一个桥接类,在其中将抽象类和实现类连接起来,并为客户端提供一个统一的接口。
以下是一个简单的C#代码示例,演示了如何使用桥接模式来将抽象部分与实现部分分离:
实现部分:
public interface IRenderer
void RenderCircle(float radius);
public class VectorRenderer : IRenderer
public void RenderCircle(float radius)
Console.WriteLine($"Drawing a circle of radius radius using vector graphics");
public class RasterRenderer : IRenderer
public void RenderCircle(float radius)
Console.WriteLine($"Drawing a circle of radius radius using raster graphics");
抽象部分:
public abstract class Shape
protected IRenderer renderer;
public Shape(IRenderer renderer)
this.renderer = renderer;
public abstract void Draw();
public class Circle : Shape
private float radius;
public Circle(float radius, IRenderer renderer) : base(renderer)
this.radius = radius;
public override void Draw()
renderer.RenderCircle(radius);
客户端:
class Program
static void Main(string[] args)
IRenderer vectorRenderer = new VectorRenderer();
IRenderer rasterRenderer = new RasterRenderer();
Shape circle1 = new Circle(5, vectorRenderer);
Shape circle2 = new Circle(10, rasterRenderer);
circle1.Draw();
circle2.Draw();
输出:
Drawing a circle of radius 5 using vector graphics
Drawing a circle of radius 10 using raster graphics
在这个示例中,`IRenderer`接口定义了实现类所要实现的方法,`VectorRenderer`和`RasterRenderer`类实现了该接口的方法。`Shape`抽象类充当桥梁,利用持有的`IRenderer`接口来定义自己的抽象方法`Draw()`,而`Circle`类则继承该抽象类并实现其抽象方法,同时传入不同的`IRenderer`对象来进行实例化。最后在客户端中调用不同的`Draw()`方法就可以实现不同的渲染效果。这样就将抽象部分与实现部分分离开来,以便每个部分独立地进行扩展和维护。
本文来自博客园,作者:明志德道,转载请注明原文链接:https://www.cnblogs.com/for-easy-fast/p/17386225.html
C#设计模式--桥接模式
设计模式:
桥接模式(Bridge Pattern)
简单介绍:
桥接模式(Bridge Pattern):桥接模式的用意是将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化。
生活实例:比如我们平常接触到的手机系统与软件的关系,每当有新的软件,他们会不断的支持各类系统(当然只是举例子,有的不一定一开始发布就把多个平台都支持了)
手机系统:ios,Android……
手机软件:微信,网易云音乐……
桥接模式组成:
桥接模式的结构包括Abstraction、RefinedAbstraction、Implementor、ConcreteImplementor四个部分,其中:
Abstraction:定义抽象类的接口,它维护了一个指向Implementor类型对象的指针。
RefinedAbstraction:扩充由Abstraction定义的接口;
Implementor:定义实现类的接口,该接口不一定要与Abstraction的接口完全一致,事实上两个接口可以完全不同。一般情况,Implementor接口仅为提供基本操作,而 Abstraction则定义了基于基本操作的较高层次操作。
ConcreteImplementor实现Implementor接口并定义它的具体实现。
在桥接模式中,两个类Abstraction和Implementor分别定义了抽象与行为类型的接口,通过调用两接口的子类实现抽象与行为的动态组合。
生活实例:Abstraction ---》SystemPlatform(系统平台接口)
RefinedAbstraction---》ios系统平台合Android系统平台
Implementor----》ISoftWare软件接口
ConcreteImplementor---》微信和网易云音乐
桥接模式类图:
桥接模式C#代码举例
ISoftware类:软件接口类
1 /// <summary> 2 /// 软件接口类 3 /// </summary> 4 public interface ISoftWare 5 { 6 void Start(); 7 }
WeiChart:微信软件类
1 /// <summary> 2 /// 微信软件类 3 /// </summary> 4 public class WeiChart:ISoftWare 5 { 6 public void Start() 7 { 8 Console.WriteLine("微信已运行!"); 9 } 10 }
WanyiMusic:网易云音乐类
1 /// <summary> 2 /// 音乐软件类 3 /// </summary> 4 public class WangyiMusic:ISoftWare 5 { 6 public void Start() 7 { 8 Console.WriteLine("网易云音乐已运行!"); 9 } 10 }
SystemPlatform类:系统平台抽象类
1 /// <summary> 2 /// 运行系统平台抽象接口类 3 /// </summary> 4 public abstract class SystemPlatform 5 { 6 public abstract void Run(ISoftWare software); 7 }
IosSys:ios系统类
1 /// <summary> 2 /// ios操作系统平台 3 /// </summary> 4 public class IosSys:SystemPlatform 5 { 6 public override void Run(ISoftWare software) 7 { 8 Console.WriteLine("IOS系统欢迎您"); 9 software.Start(); 10 } 11 }
AndroidSys:Android系统类
1 /// <summary> 2 /// Android系统类实现 3 /// </summary> 4 public class AndroidSys:SystemPlatform 5 { 6 public override void Run(ISoftWare software) 7 { 8 Console.WriteLine("欢迎来到Android系统"); 9 software.Start(); 10 } 11 }
用户测试类:
1 /// <summary> 2 /// 用户测试类 3 /// </summary> 4 class Client 5 { 6 static void Main(string[] args) 7 { 8 //创建软件对象 9 WeiChart weichart = new WeiChart(); 10 WangyiMusic wangyiMusic = new WangyiMusic(); 11 12 Console.WriteLine("-----------IOS-----------"); 13 //ios系统运行软件 14 IosSys iosSys = new IosSys(); 15 iosSys.Run(weichart); 16 iosSys.Run(wangyiMusic); 17 18 Console.WriteLine("---------Android---------"); 19 //android系统运行软件 20 AndroidSys androidSys = new AndroidSys(); 21 androidSys.Run(weichart); 22 androidSys.Run(wangyiMusic); 23 24 Console.Read(); 25 26 } 27 }
运行结果:
桥接模式C#代码工程下载
以上是关于C#设计模式08——桥接模式的写法的主要内容,如果未能解决你的问题,请参考以下文章