C#设计模式-3结构型模式-3.2桥接模式(Bridge Pattern)
2022/2/19 12:41:44
本文主要是介绍C#设计模式-3结构型模式-3.2桥接模式(Bridge Pattern),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
3.2.1 定义
将抽象部分与它的实现部分分离,使它们都可以独立地变化
3.2.2 场景模拟
以电视遥控器的一个例子来引出桥接模式解决的问题,遥控器有开电视,关电视,以及更换节目的功能,电视机有多个品牌
3.2.3 场景代码实现
抽象类TV封装了遥控器功能的变化,具体实现交给具体型号电视机去完成:
/// <summary> /// 电视机,提供抽象方法 /// </summary> public abstract class TV { public abstract void TurnOn(); public abstract void TurnOff(); public abstract void ChangeChannel(); } /// <summary> /// 长虹牌电视机,重写基类的抽象方法 /// 提供具体的实现 /// </summary> public class ChangHongTV : TV { public override void TurnOn() { Console.WriteLine("长虹电视打开了"); } public override void TurnOff() { Console.WriteLine("长虹电视关闭了"); } public override void ChangeChannel() { Console.WriteLine("长虹电视换节目"); } } /// <summary> /// 熊猫牌电视机,重写基类的抽象方法 /// 提供具体的实现 /// </summary> public class PandaTV : TV { public override void TurnOn() { Console.WriteLine("熊猫电视打开了"); } public override void TurnOff() { Console.WriteLine("熊猫电视关闭了"); } public override void ChangeChannel() { Console.WriteLine("熊猫电视换节目"); } }
抽象化部分的代码:
/// <summary> /// 抽象概念中的遥控器,扮演抽象化角色 /// </summary> public class RemoteControl { public TV Implementor { get; set; } public virtual void TurnOn() { Implementor.TurnOn(); } public virtual void TurnOff() { Implementor.TurnOff(); } public virtual void ChangeChannel() { Implementor.ChangeChannel(); } } /// <summary> /// 具体遥控器 /// </summary> public class ConcreteRemote : RemoteControl { public override void ChangeChannel() { Console.WriteLine("-------------------"); base.ChangeChannel(); Console.WriteLine("-------------------"); } }
客户端调用:
class Program { static void Main(string[] args) { // 创建一个遥控器 RemoteControl remoteControl = new ConcreteRemote(); // 长虹电视机 remoteControl.Implementor = new ChangHongTV(); remoteControl.TurnOn(); remoteControl.ChangeChannel(); remoteControl.TurnOff(); Console.WriteLine(); // 熊猫牌电视机 remoteControl.Implementor = new PandaTV(); remoteControl.TurnOn(); remoteControl.ChangeChannel(); remoteControl.TurnOff(); Console.Read(); } }
3.2.4 桥接模式的结构图
3.2.5 桥接模式的基本代码
Implementor类:
public abstract class Implementor { public abstract void Operation(); } public class ConcreteImplementorA : Implementor { public override void Operation() { Console.WriteLine("具体实现A的方法执行"); } } public class ConcreteImplementorB : Implementor { public override void Operation() { Console.WriteLine("具体实现B的方法执行"); } }
Abstraction类:
public class Abstraction { protected Implementor implementor; public void SetImplementor(Implementor implementor) { this.implementor = implementor; } public virtual void Operation() { implementor.Operation(); } } public class RefindedAbstraction : Abstraction { public override void Operation() { implementor.Operation(); } }
客户端调用:
class Program { static void Main(string[] args) { Abstraction ab = new RefindedAbstraction(); ab.SetImplementor(new ConcreteImplementorA()); ab.Operation(); ab.SetImplementor(new ConcreteImplementorB()); ab.Operation(); Console.Read(); } }
3.2.6 优缺点
优点:
把抽象接口与其实现解耦。
抽象和实现可以独立扩展,不会影响到对方。
实现细节对客户透明,对用于隐藏了具体实现细节。
缺点: 增加了系统的复杂度
3.2.7 使用场景
如果一个系统需要在构件的抽象化角色和具体化角色之间添加更多的灵活性,避免在两个层次之间建立静态的联系。
设计要求实现化角色的任何改变不应当影响客户端,或者实现化角色的改变对客户端是完全透明的。
需要跨越多个平台的图形和窗口系统上。
一个类存在两个独立变化的维度,且两个维度都需要进行扩展。
参考链接:https://www.cnblogs.com/zhaoshujie/p/9743429.html
这篇关于C#设计模式-3结构型模式-3.2桥接模式(Bridge Pattern)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#