C#设计模式之七桥接模式(Bridge Pattern)【结构型】
一、引言 2.4、模式的组成 ????? 桥接模式的结构包括Abstraction、RefinedAbstraction、Implementor、ConcreteImplementorA和ConcreteImplementorB五个部分,其中: ?????? (1)、抽象化角色(Abstraction):抽象化给出的定义,并保存一个对实现化对象(Implementor)的引用。 ?????? (2)、修正抽象化角色(Refined Abstraction):扩展抽象化角色,改变和修正父类对抽象化的定义。 ?????? (3)、实现化角色(Implementor):这个角色给出实现化角色的接口,但不给出具体的实现。必须指出的是,这个接口不一定和抽象化角色的接口定义相同,实际上,这两个接口可以非常不一样。实现化角色应当只给出底层操作,而抽象化角色应当只给出基于底层操作的更高一层的操作。 ?????? (4)、具体实现化角色(Concrete Implementor):这个角色给出实现化角色接口的具体实现。 在桥接模式中,两个类Abstraction和Implementor分别定义了抽象与行为类型的接口,通过调用两接口的子类实现抽象与行为的动态组合。 2.5 、桥接模式的具体代码实现 ?? 今天我们就以数据库为例来写该模式的实现。每种数据库都有自己的版本,但是每种数据库在不同的平台上实现又是不一样的。比如:微软的SqlServer数据库,该数据库它有2000版本、2005版本、2006版本、2008版本,后面还会有更新的版本。并且这些版本都是运行在Windows操作系统下的,如果要提供Lunix操作系统下的SqlServer怎么办呢?如果又要提供IOS操作系统下的SqlServer数据库该怎么办呢?这个情况就可以使用桥接模式,也就是Brige模式。我们就来看看具体的实现吧!? 1 namespace 桥接模式的实现 2 { 3 /// <summary> 4 /// 该抽象类就是抽象接口的定义,该类型就相当于是Abstraction类型 5 </summary> 6 public abstract class Database 7 { 8 //通过组合方式引用平台接口,此处就是桥梁,该类型相当于Implementor类型 9 protected PlatformImplementor _implementor; 10 11 通过构造器注入,初始化平台实现 12 Database(PlatformImplementor implementor) 13 { 14 this._implementor = implementor; 15 } 16 17 创建数据库--该操作相当于Abstraction类型的Operation方法 18 void Create(); 19 } 20 21 22 该抽象类就是实现接口的定义,该类型就相当于是Implementor类型 23 24 PlatformImplementor 25 26 该方法就相当于Implementor类型的OperationImpl方法 27 Process(); 28 29 30 31 SqlServer2000版本的数据库,相当于RefinedAbstraction类型 32 33 SqlServer2000 : Database 34 35 构造函数初始化 36 public SqlServer2000(PlatformImplementor implementor) : base(implementor) { } 37 38 override Create() 39 40 this._implementor.Process(); 41 42 43 44 45 SqlServer2005版本的数据库,相当于RefinedAbstraction类型 46 47 SqlServer2005 : Database 48 49 50 public SqlServer2005(PlatformImplementor implementor) : 51 52 53 54 55 56 57 58 59 SqlServer2000版本的数据库针对Unix操作系统具体的实现,相当于ConcreteImplementorA类型 60 61 SqlServer2000UnixImplementor : PlatformImplementor 62 63 Process() 64 65 Console.WriteLine("SqlServer2000针对Unix的具体实现"); 66 67 68 69 70 SqlServer2005版本的数据库针对Unix操作系统的具体实现,相当于ConcreteImplementorB类型 71 72 sealed SqlServer2005UnixImplementor : PlatformImplementor 73 74 75 76 Console.WriteLine(SqlServer2005针对Unix的具体实现77 78 79 80 Program 81 82 static Main() 83 84 PlatformImplementor SqlServer2000UnixImp = new SqlServer2000UnixImplementor(); 85 还可以针对不同平台进行扩展,也就是子类化,这个是独立变化的 86 87 Database SqlServer2000Unix = SqlServer2000(SqlServer2000UnixImp); 88 数据库版本也可以进行扩展和升级,也进行独立的变化。 89 90 以上就是两个维度的变化。 91 92 就可以针对Unix执行操作了 93 SqlServer2000Unix.Create(); 94 95 96 } ??? 代码都很简单,也有详细的备注,就不多说了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |