设计模式-1.10桥接模式

桥接模式:bridge,将抽象部分与它的实现部分分离,使它们都可以独立的变化。(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操作系统"<<endl; }
11 };
12 class LinuxOS: public OS
13 {
14 public:
15     void InstallOS_Imp() { cout<<"安装Linux操作系统"<<endl; }
16 };
17 class UnixOS: public OS
18 {
19 public:
20     void InstallOS_Imp() { cout<<"安装Unix操作系统"<<endl; }
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 }

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

补充:

在面向对象中,合成/聚合复用原则:优先使用对象合成/聚合,而不是类继承。这样有助于你保持每个类被封装,并被剧终在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。

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

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

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

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

链接:

http://www.cnblogs.com/hegezhou_hot/archive/2010/12/10/1902185.html

http://blog.csdn.net/wuzhekai1985/article/details/6670473

时间: 2024-10-14 20:24:22

设计模式-1.10桥接模式的相关文章

如何让孩子爱上设计模式 ——10.桥接模式(Bridge Pattern)

如何让孩子爱上设计模式 --10.桥接模式(Bridge Pattern) 我有故事,你有酒吗?这年头写个技术文不讲个故事都不行,行,我讲: 还有发现很多的技术博文都开始有喜欢往文中插入几个表情的趋势了, 但是你真的插的姿势对了吗?这种事情不是随便插的,来来来,给你 见识下如何在适当的场景插入适当的表情以让读者感觉到易可赛艇, 本文以讲故事插表情为主,讲述桥接模式为辅,多图预警, 简书上排版可能有些问题,最佳排版可见: https://www.zybuluo.com/coder-pig/note

设计模式入门之桥接模式Bridge

//桥接模式定义:将抽象部分与它的实现部分分离,使得他们都可以独立地变化 //广义来讲,桥接模式非常普遍,面向抽象编程,面向接口编程就可以看作是他的体现 //实例:一个系统,要按照不同的要求发信息(普通,加急,特急),而且还要以不同的方式发送(站内信,Email,短信)等,考虑到其扩展性,用桥接模式再合适不过了 //上代码 //桥接的一半---抽象部分 public abstract class AbstractionMessage { protected MessageImplementor

Java设计模式系列之桥接模式

桥接模式(Bridge)的定义 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?这就要使用桥接模式 将抽象部分与它的实现部分分离,使它们都可以独立地变化. 桥接模式(Bridge)的动机 当一种抽象类型可能有多种实现方式时,一般情况我们可以考虑使用继承来解决抽象类型的多种实现,在抽象类型中定义接口,而子类负责接口的具体实现.但这种做法缺乏灵活性,由于抽象类型和子类之间紧紧地绑定在一起,使得这种关系在运行时不能再修改,这使得它难以修改.扩展和重用

设计模式学习笔记-桥接模式

一.概述 将抽象部分与它的实现部分分离,使它们都可以独立地变化. 二.模式中的角色 Abstraction:定义抽象类的接口:维护一个指向Implementor类型对象的指针: RefinedAbstraction:扩充由Abstraction定义的接口: Implementor:定义具体行为,具体特征的应用接口: ConcreteImplementor:实现Implementor. 三.UML类图 四.代码实现 4.1 桥接模式的实现代码 /// <summary> /// 实现 /// &

[设计模式] javascript 之 桥接模式

桥接模式说明 定义:分离抽象化与实现化,使之可以自由独立的变化: 说明:由于软件环境需求原因,使得类型抽象具有多种实现以自身变化定义等情况,这使得我们要分离抽象实现与具体实现,使得抽象化与实现化解耦,使之可以分开独立的变化,使得两者可以自由添加各自处理过程实现. 桥接模式就可以解决上面的问题,桥接模式的角色: 1. 抽象化角色,这个抽象化类中定义对 实现化接口定义的引用: 2. 修正抽象化角色,这个角色扩展并修改抽象化接口定义的实现,该修改用于引用实现化接口的实现的 (底层) 操作: 3. 实现

Java-马士兵设计模式学习笔记-桥接模式

一.概述 1.桥接模式的应用情况:(1)两个维度扩展(2)排列组合 二.代码 1.Gift.java 1 public class Gift { 2 3 protected GiftImpl giftImpl; 4 } 2.GiftImpl.java 1 public class GiftImpl { 2 3 } 3.WarmGift.java 1 public class WarmGift extends Gift { 2 3 public WarmGift(GiftImpl giftImpl

《Java设计模式》之桥接模式

Bridge模式的概念 Bridge 模式是构造型的设计模式之一.Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任.它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展. Bridge模式的应用场景 面向对象的程序设计(OOP)里有类继承(子类继承父类)的概念,如果一个类或接口有多个具体实现子类,如果这些子类具有以下特性: - 存在相对并列的子类属性. -

Java设计模式学习记录-桥接模式

前言 这次介绍结构型设计模式中的第二种模式,桥接模式. 使用桥接模式的目的就是为了解耦,松散的耦合更利于扩展,但是会增加相应的代码量和设计难度. 桥接模式 桥接模式是为了将抽象化与实现化解耦,让二者可以独立地变化.方便对每一部分的扩展,以及单独的维护.抽象化的一方与实现化的一方之间建立一个桥梁,这样两者的依赖关系就可以通过这个桥梁来建立了. 举例 三个小动物要过河,分别是小猪,小鸡,小马,小猪要去河对面的空地晒太阳,小鸡要去河对面的小树林里找虫子吃,小马要去河对面的草地里吃草.那么它们三个都要经

设计模式(7)--Bridge(桥接模式)--结构型

1.模式定义: 桥接模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式.桥接模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”. 2.模式特点: 桥接模式虽然不是一个使用频率很高的模式,但是熟悉这个模式对于理解面向对象的设计原则,包括“开-闭”原则以及组合/聚合复用原则都很有帮助.理解好这两个原则,有助于形成正确的设计思想和培养良好的设计风格. 桥接模式的用意是“将抽象化(Ab