设计模式1.10桥接模式 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    桥接模式:bridge,将抽象部分与它的实现部分分离,使它们都可以独立的变化,

设计模式1.10桥接模式

。(DP)

    通俗理解:实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。

    结构图:

    桥接模式的使用场景

    1、当一个对象有多个变化因素的时候,通过抽象这些变化因素,将依赖具体实现,修改为依赖抽象。

    2、当某个变化因素在多个对象中共享时。我们可以抽象出这个变化因素,然后实现这些不同的变化因素。

    3、当我们期望一个对象的多个变化因素可以动态的变化,而且不影响客户的程序的使用时。

    实例一:计算机与操作系统

    书上定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。考虑装操作系统,有多种配置的计算机,同样也有多款操作系统。如何运用桥接模式呢?可以将操作系统和计算机分别抽象出来,让它们各自发展,减少它们的耦合度。当然了,两者之间有标准的接口。这样设计,不论是对于计算机,还是操作系统都是非常有利的。下面给出这种设计的UML图,其实就是桥接模式的UML图。

    复制代码

    1 //操作系统

    2 class OS

    3 {

    4 public:

    5  virtual void InstallOS_Imp() {}

    6 };

    7 class WindowOS: public OS

    8 {

    9 public:

    10  void InstallOS_Imp() { cout<<"安装Window操作系统"<

    11 };

    12 class LinuxOS: public OS

    13 {

    14 public:

    15  void InstallOS_Imp() { cout<<"安装Linux操作系统"<

    16 };

    17 class UnixOS: public OS

    18 {

    19 public:

    20  void InstallOS_Imp() { cout<<"安装Unix操作系统"<

    21 };

    22 //计算机

    23 class Computer

    24 {

    25 public:

    26  virtual void InstallOS(OS *os) {}

    27 };

    28 class DellComputer: public Computer

    29 {

    30 public:

    31  void InstallOS(OS *os) { os->InstallOS_Imp(); }

    32 };

    33 class AppleComputer: public Computer

    34 {

    35 public:

    36  void InstallOS(OS *os) { os->InstallOS_Imp(); }

    37 };

    38 class HPComputer: public Computer

    39 {

    40 public:

    41  void InstallOS(OS *os) { os->InstallOS_Imp(); }

    42 };

    复制代码

    客户使用方式:

    复制代码

    1 int main()

    2 {

    3  OS *os1 = new WindowOS();

    4  OS *os2 = new LinuxOS();

    5  Computer *computer1 = new AppleComputer();

    6  computer1->InstallOS(os1);

    7  computer1->InstallOS(os2);

    8 }

    复制代码

    实例二:手机品牌与手机软件

    补充:

    在面向对象中,合成/聚合复用原则:优先使用对象合成/聚合,而不是类继承,

电脑资料

设计模式1.10桥接模式》(https://www.unjs.com)。这样有助于你保持每个类被封装,并被剧终在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。

    合成(组合、Composition)和聚合(Aggregation)都是关联的特殊种类。

    关联:两个类的一般性关系,例如学生和老师就是一种关联关系。

    聚合:has-a的关系,是一种相对松散的关系,聚合类不需要对被聚合类负责,使用空的菱形表示聚合关系。

    组合:contains-a的关系,关联性强于聚合,组合类和被组合类有相同的生命周期,组合类要对被组合类负责,采用实心的菱形标识组合关系。

最新文章