桥接模式
模式定义
桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。
当一个对象由多个对象组合而成,使用桥接模式能减少类数量。
UML类图
- 抽象类(Abstraction) 定义一个成员变量(实现类接口类型) 和赋值方法
- 扩展抽象类(Refined Abstraction) 实现了在抽象类中定义的抽象业务方法,在扩充抽象类中可以调用 在实现类接口中定义的业务方法
- 实现类接口(Implementor) 实现部分的基本操作接口
- 具体实现类(Concrete Implement) 实现了实现类接口
代码结果
public static class BridgeApp
{
public static void Run()
{
Abstraction ab = new RefinedAbstraction();
ab.Implementor = new ConcreteImplementorA();
ab.Operation();
}
}
public class Abstraction
{
protected Implementor implementor;
public Implementor Implementor
{
set { implementor = value; }
}
public virtual void Operation()
{
implementor.Operation();
}
}
public interface Implementor
{
void Operation();
}
public class RefinedAbstraction : Abstraction
{
public override void Operation()
{
implementor.Operation();
}
}
public class ConcreteImplementorA : Implementor
{
public void Operation()
{
Console.WriteLine("ConcreteImplementorA Operation");
}
}
public class ConcreteImplementorB : Implementor
{
public void Operation()
{
Console.WriteLine("ConcreteImplementorB Operation");
}
}
情景模式
现在智能手机品牌越来越多了,其实大家都明白好的手机都是那不同的部件组装下。这里假设手机主要CPU和内存。哈哈只需要修改CPU与内存就可以生产不同类型的手机
public static class BridgeApp
{
public static void Run()
{
PhoneOne phone1 = new PhoneOne();
phone1.Display();
PhoneTwo phone2 = new PhoneTwo();
phone2.Display();
}
}
public class PhoneOne
{
private CPU _cpu = new HPCPU();
private RAM _ram = new RAM128();
public void Display()
{
Console.WriteLine("Phone one:");
_cpu.Display();
_ram.Display();
Console.WriteLine("------------------------------------------");
}
}
public class PhoneTwo
{
private CPU _cpu = new HPCPU();
private RAM _ram = new RAM64();
public void Display()
{
Console.WriteLine("Phone two:");
_cpu.Display();
_ram.Display();
Console.WriteLine("------------------------------------------");
}
}
public abstract class CPU
{
public abstract void Display();
}
public abstract class RAM
{
public abstract void Display();
}
public class RAM64 : RAM
{
public override void Display()
{
Console.WriteLine("RMS size is 64");
}
}
public class RAM128 : RAM
{
public override void Display()
{
Console.WriteLine("RMS size is 128");
}
}
public class LestinaCPU : CPU
{
public override void Display()
{
Console.WriteLine("CPU Type is LestinaCPU");
}
}
public class HPCPU : CPU
{
public override void Display()
{
Console.WriteLine("CPU Type is HPCPU");
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)