c#设计模式-结构型模式-2.桥接模式

Posted mr.chenyuelin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#设计模式-结构型模式-2.桥接模式相关的知识,希望对你有一定的参考价值。

桥接模式用于将抽象化和实现化解耦,使得两者可以独立变化。其实两个都是抽象的部分,一个事务多个维度的变化分离

在面向对象中用通俗的话说明:一个类可以通过多角度来分类,每一种分类都可能变化,那么就把多角度分离出来让各个角度都能独立变化,降低各个角度间的耦合

结构图:
在这里插入图片描述
例子,我们想让不同数据库版本在不同的平台上运行,当然里面的方法内容也不一样
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.扩展性好,解决了多角度分类使用继承可能出现的子类爆炸问题。

桥接模式的缺点:

桥接模式的引进需要通过聚合关联关系建立抽象层,增加了理解和设计系统的难度。

以上是关于c#设计模式-结构型模式-2.桥接模式的主要内容,如果未能解决你的问题,请参考以下文章

C#设计模式08——桥接模式的写法

C#设计模式--桥接模式

设计模式---桥接模式

[设计模式C++go]结构型模式:桥接模式

[设计模式C++go]结构型模式:桥接模式

[设计模式C++go]结构型模式:桥接模式