例如我有好几个项目,须要外包出去作各类类型的测试,不一样的公司基础费用不一样,不一样的测试类型价格也是不一样的。此时不一样的项目选择不一样的公司和不一样类型的测试进行测试价格都是不一样的。因而咱们能够建立一个项目抽象类,一个公司抽象类,一个测试类型抽象类,而后实现各自的具体类,不一样的项目使用不一样的公司和测试类型,进行测试。抽象化与实现化解耦,两者能够独立变化。咱们将这种经过提供抽象化和实现化之间的桥接结构,来实现两者的解耦的类型称为桥接模式。编程
桥接(Bridge)是用于把抽象化与实现化解耦,使得两者能够独立变化。这种类型的设计模式属于结构型模式,它经过提供抽象化和实现化之间的桥接结构,来实现两者的解耦。
这种模式涉及到一个做为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。设计模式
以引言中的示例进行实现。一个产品须要外包出去进行测试。测试
涉及三个角色:产品、外包公司、测试类型this
using System; namespace Bridge { class Program { static void Main(string[] args) { Company beijingCompany = new BeijingCompany(); TestType manualTest = new ManualTest(); Prodeuct managementProdeuct = new ManagementProdeuct(beijingCompany, manualTest); managementProdeuct.Run(); Company shanghaiCompany = new ShanghaiCompany(); TestType autoTest = new AutoTest(); Prodeuct operationProdeuct = new ManagementProdeuct(shanghaiCompany, autoTest); operationProdeuct.Run(); Console.Read(); } } /// <summary> /// 软件产品,抽象类 /// 充当抽象化角色 /// 将抽象部分与实现部分分离,使他们均可以独立的变化 /// </summary> public abstract class Prodeuct { private readonly Company _company; private readonly TestType _testType; // 使用组合,一个产品外包出去,须要一个公司进行不一样测试类型的测试 public Prodeuct(Company company, TestType testType) { this._company = company; this._testType = testType; } public string Name { get; set; } // 执行实现部分 public void Run() { Console.WriteLine($"{this._company.Name}对产品{Name}进行{this._testType.Name},总共花费时间{this._company.BaseTime + this._testType.RunTime}。"); Console.WriteLine("======================================================"); } } /// <summary> /// 公司,对实现部分进行抽象 /// </summary> public abstract class Company { public string Name { get; set; } public Double BaseTime { get; set; } } /// <summary> /// 测试类型,对实现部分进行抽象 /// </summary> public abstract class TestType { public string Name { get; set; } public Double RunTime { get; set; } } /// <summary> /// 管理系统,扩展抽象化角色 /// </summary> public class ManagementProdeuct : Prodeuct { public ManagementProdeuct(Company company, TestType testType) : base(company, testType) { Name = "管理系统"; } } /// <summary> /// 运营系统,扩展抽象化角色 /// </summary> public class OperationProdeuct : Prodeuct { public OperationProdeuct(Company company, TestType testType) : base(company, testType) { Name = "运营系统"; } } /// <summary> /// 公司抽象类具体实现,具体实现化角色 /// </summary> public class BeijingCompany : Company { public BeijingCompany() { Name = "北京公司"; BaseTime = 200; } } /// <summary> /// 公司抽象类具体实现,具体实现化角色 /// </summary> public class ShanghaiCompany : Company { public ShanghaiCompany() { Name = "上海公司"; BaseTime = 100; } } /// <summary> ///测试类型抽象类具体实现,具体实现化角色 /// </summary> public class ManualTest : TestType { public ManualTest() { Name = "手工测试"; RunTime = 30; } } /// <summary> ///测试类型抽象类具体实现,具体实现化角色 /// </summary> public class AutoTest : TestType { public AutoTest() { Name = "自动测试"; RunTime = 10; } } }
运行后结果:spa
北京公司对产品管理系统进行手工测试,总共花费时间230。 ====================================================== 上海公司对产品管理系统进行自动测试,总共花费时间110。 ======================================================