澎湖县网站建设_网站建设公司_C#_seo优化
2025/12/31 2:09:00 网站建设 项目流程

1.模式动机与定义

模式定义

  1. 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。
  2. 对象结构型模式,又称为柄体(Handle and Body)模式或接囗(Interface)模式
  3. 用抽象关联取代了传统的多层继承
  4. 将类之间的静态继承关系转换为动态的对象组合关系

2.模式结构与分析

模式结构

桥接模式包含如下角色

  1. Abstraction:抽象类:用于定义抽象类的接口,它一般是抽象类而不是接口。其中定义了一个Implementor(实现抽象类)类型的对象并可以维护该对象,它与Implementor之间具有关联关系,可以包含抽象的业务方法,还可以包含具体的业务方法。
  2. RefinedAbstraction:扩充抽象类:扩充由Abstraction定义的接口,不再是抽象类而是具体类,实现定义中的抽象业务方法。
  3. Implementor:实现类接口:实现Implementor接口并具体实现它,在不同的concreteImplementor中提供基本操作的不同实现,在程序运行时,其对象将替换其父类对象,提供给客户端具体的业务操作方法。
  4. Concretelmplementor:具体实现类类:定义实现类的接口

模式分析

理解桥接模式,重点需要理解如何将抽象化(Abstraction)与实现化(Implementation)脱耦使得二者可以独立地变化。

抽象化:抽象化就是忽略一些信息,把不同的实体当作同样的实体对待。在面向对象中,将对象的共同性质抽取出来形成类的过程即为抽象化的过程。

实现化:针对抽象化给出的具体实现,就是实现化,抽象化与实现化是一对互逆的概念,实现化产生的对象比抽象化更具体,是对抽象化事物的进一步具体化的产物。

脱耦:脱耦就是将抽象化和实现化之间的耦合解脱开,或者说是将它们之间的强关联改换成弱关联,将两个角色之间的继承关系改为关联关系。桥接模式中的所谓脱耦,就是指在一个软件系统的抽象化和实现化之间使用关联关系(组合或者聚合关系)而不是继承关系,从而使两者可以相对独立地变化:这就是桥接模式的用意。

//典型的实现类接口代码
public interface Implementor{public void operationImpl();
}//典型的抽象类代码
public abstract class Abstraction{protected Implementor impl;public void setlmpl(Implementor impl){this.impl=impl;}public abstract void operation();
}//典型的扩充抽象类代码
public class RefinedAbstraction extends Abstraction{public void operation(){//代码impl.operationImplO;//代码}
}

3.模式效果与应用

优点

分离抽象接口及其实现部分
可以取代多层继承方案,极大地减少了子类的个数
提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,不需要修改原有系统,符合开闭原则

缺点

会增加系统的理解与设计难度,由于关联关系建立在抽象层,要求开发者开始就要针对抽象层进行设计与编程

正确识别出系统中两个独立变化的维度并不是一件容易的事情

使用情况

  1. 需要在抽象化和具体化之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系
  2. 抽象部分和实现部分可以以继承的方式独立扩展而互不影响
  3. 一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立地进行扩展
  4. 不希望使用继承因为多层继承导致系统类的个数急剧增加的系统

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询