桥接模式用于将抽象化和实现化解耦,使得两者可以独立变化。其实两个都是抽象的部分,一个事务多个维度的变化分离
在面向对象中用通俗的话说明:一个类可以通过多角度来分类,每一种分类都可能变化,那么就把多角度分离出来让各个角度都能独立变化,降低各个角度间的耦合
结构图:
例子,我们想让不同数据库版本在不同的平台上运行,当然里面的方法内容也不一样
abstraction充当我们的数据库,而implementor充当对应的平台
代码核心:在抽象化角色里利用组合引用实现化角色的接口,也就是桥梁
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 桥接模式
{
//抽象化角色
public abstract class Database
{
//利用组合方式引用平台接口,此处为不同数据库版本在不同平台上运行的桥梁
protected PlatformImplementor _implementor;
//初始化不同平台实现
public Database(PlatformImplementor implementor)
{
_implementor = implementor;
}
public abstract void Create();
}
//扩展抽象化角色
public sealed class Mysql8 : Database
{
public Mysql8(PlatformImplementor implementor) : base(implementor) {
}
public override void Create()
{
_implementor.Process();
}
}
public sealed class Mysql7 : Database
{
public Mysql7(PlatformImplementor implementor) : base(implementor) {
}
public override void Create()
{
_implementor.Process();
}
}
//实现化角色
public abstract class PlatformImplementor
{
public abstract void Process();
}
//具体实现化角色
public sealed class Mysql8LinuxImplementor : PlatformImplementor
{
public override void Process()
{
Console.WriteLine("mysql8针对linux平台的具体实现");
}
}
public sealed class Mysql7LinuxImplementor : PlatformImplementor
{
public override void Process()
{
Console.WriteLine("mysql7针对linux平台的具体实现");
}
}
class Program
{
static void Main(string[] args)
{
PlatformImplementor implementor = new Mysql7LinuxImplementor();
Database mysql7 = new Mysql7(implementor);
mysql7.Create();
}
}
}
桥接模式的使用场景:
当系统实现有多个角度分类,每种分类都可能变化时使用。近几年提出的微服务概念采用了桥接模式的思想,通过各种服务的组合来实现一个大的系统。
桥接模式的优点:
1.实现抽象和具体的分离,降低了各个分类角度间的耦合;
2.扩展性好,解决了多角度分类使用继承可能出现的子类爆炸问题。
桥接模式的缺点:
桥接模式的引进需要通过聚合关联关系建立抽象层,增加了理解和设计系统的难度。
转载:https://blog.csdn.net/weixin_44453949/article/details/117261765
查看评论