设计模式之笔记--桥接模式(Bridge)
桥接模式(Bridge)
定义
桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化。
类图

描述
Abstraction:定义抽象部分的接口,通常在这个接口里面要维护一个实现部分的对象引用;在抽象部分的方法里面需要调用实现部分的方法,这个抽象部分的方法里面通常都是跟具体的业务相关的方法;
RefinedAbstraction:扩展抽象部分的接口,通常在这些方法里面定义跟实际业务相关的方法,这些方法通常会使用Abstraction中定义的方法,也可能需要调用实现部分的方法来完成;
Implementor:定义实现部分的接口,这个接口不用和Abstraction里面的方法一致,通常是由Implementor接口提供基本的操作,而Abstraction里面定义的是基于这些基本操作的业务方法,也就是说Abstraction定义了基于这些基本操作的较高层次的操作;
ConcreteImplementor:实现Implementor接口。
应用场景
手机品牌有MEIZU、IPhone等品牌,每种手机都可以安装音乐、游戏等app,但是MEIZU手机的操作系统是Flyme OS基于Android,IPhone的操作系统是IOS,所以同一款音乐或游戏app都要有Android和IOS两种版本。
按手机品牌划分的类图如下:

按app功能划分的类图如下:

如果现在要增加一种WP操作系统的手机,那么就需要在MobilePhone下增加一个子类,同时给这个子类增加音乐和游戏的app子类;如果再增加一个导航功能的app,那么就需要在每种手机下增加一个导航app子类;如果再增加其他手机或其他功能的app,那么上述类图将会变得无比庞大。这时就需要对类图作一些改进。
从上述类图可以看到,手机上可以安装音乐、游戏等app,也可以不安装,不管安不安装这些app,都不会影响手机的使用,由此可见手机和app之间的关系是一种聚合关系。于是,可以把上面的类图改为如下:

这样就把手机和app分离开了,也就意味着如果要增加手机种类,只需在MobilePhone下增加一个子类;如果要增加app种类,只需在MobilePhoneApp下增加一个子类;不管是增加手机或是app的种类都不会影响其他类。
组合/聚合复用原则,尽量使用组合/聚合,而不要使用类继承。
public abstract class MobilePhoneApp
{
public abstract void Run();
} public class Music : MobilePhoneApp
{
public override void Run()
{
Console.WriteLine("运行手机音乐.");
}
} public class Game : MobilePhoneApp
{
public override void Run()
{
Console.WriteLine("运行手机游戏.");
}
} public abstract class MobilePhone
{
protected MobilePhoneApp app; public MobilePhone(MobilePhoneApp app)
{
this.app = app;
} public abstract void Run();
} public class MEIZU : MobilePhone
{
public MEIZU(MobilePhoneApp app)
: base(app)
{ } public override void Run()
{
this.app.Run();
}
} public class IPhone : MobilePhone
{
public IPhone(MobilePhoneApp app)
: base(app)
{ } public override void Run()
{
this.app.Run();
}
}
设计模式之笔记--桥接模式(Bridge)的更多相关文章
- 设计模式 笔记 桥接模式 Bridge
//---------------------------15/04/15---------------------------- //Bridge 桥接模式----对象结构型模式 /* 1:意图:将 ...
- Net设计模式实例之桥接模式( Bridge Pattern)
一.桥接模式简介(Brief Introduction) 桥接模式(Bridge Pattern),将抽象部分与它的实现部分分离,使的抽象和实现都可以独立地变化. Decouple an abstra ...
- 设计模式学习心得<桥接模式 Bridge>
说真的在此之前,几乎没有对于桥接模式的应用场景概念. 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来 ...
- IOS设计模式浅析之桥接模式(Bridge)
引言 在项目开发中,我们会遇到这样的一种场景:某些类型由于自身的逻辑,往往具有两个或多个维度的变化,比如说大话设计模式书中所说的手机,它有两个变化的维度:一是手机的品牌,可能有三星.苹果等:二是手机上 ...
- Java-马士兵设计模式学习笔记-桥接模式
一.概述 1.桥接模式的应用情况:(1)两个维度扩展(2)排列组合 二.代码 1.Gift.java public class Gift { protected GiftImpl giftImpl; ...
- 设计模式入门之桥接模式Bridge
Abstraction:抽象部分的父类,定义须要实现的接口.维护对实现部分的引用,从而把实现桥接到Implementor中去 Implementor:实现部分的接口 RefinedAbstractio ...
- 学习笔记——桥接模式Bridge
桥接模式的目的是在设计初,就将实现与接口分离,在以后实现发生变化时,只需要改变传递的实现对象,在保持接口一致的情况,达到实现的变更. 在OperationInterface中就调用实现的方法imp.O ...
- 《JAVA设计模式》之桥接模式(Bridge)
在阎宏博士的<JAVA与模式>一书中开头是这样描述桥梁(Bridge)模式的: 桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式. ...
- 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)
原文:乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) 作者:webabcd 介绍 ...
随机推荐
- BZOJ4867 Ynoi2017舌尖上的由乃(dfs序+分块)
容易想到用dfs序转化为序列上的问题.考虑分块,对每块排序,修改时对于整块打上标记,边界暴力重构排序数组,询问时二分答案,这样k=sqrt(nlogn)时取最优复杂度nsqrt(nlogn)logn, ...
- Bellman—Ford算法思想
---恢复内容开始--- Bellman—Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题.对于给定的带权(有向或无向)图G=(V,E),其源点为s,加权函数w是边集E的映射.对图G ...
- BZOJ3329:Xorequ——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=3329 原式化为x^2x=3x,而且实际上异或就是不进位的加法. 那么我们又有x+2x=3x,所以在做 ...
- Java第一次实验报告——Java开发环境的熟悉
北京电子科技学院(BESTI) 实 验 报 告 课程名称:java程序设计实验 班级:1352 姓名:洪韶武 学号:20135219 成绩: ...
- 5028: 小Z的加油店(线段树)
NOI2012魔幻棋盘弱化版 gcd(a,b,c,d,e)=gcd(a,b-a,c-b,d-c,e-d) 然后就可以把区间修改变成差分后的点修了. 用BIT维护原序列,线段树维护区间gcd,支持点修区 ...
- 史上最全Linux提权后获取敏感信息方法
http://www.freebuf.com/articles/system/23993.html 在本文开始之前,我想指出我不是专家.据我所知,在这个庞大的区域,没有一个“神奇”的答案.分享,共享( ...
- postgresql pgagent 的安装及使用
pgagent 作为postgresql的一个任务调度代理,在postgresql 9.0 以前 是附带在pgadmin 包下面的,只是默认不安装,9.0之后作为了一个单独是的安装包.所以要使用pga ...
- HDU 4417 主席树写法
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 2136 素数打表+求质数因子
Largest prime factor Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- 清北学堂模拟赛d6t6 棋盘迷宫
3.棋盘迷宫(boardgame.pas/c/cpp)(boardgame.in/out)时间限制:5s/空间限制:256M[题目描述]小 A 和小 Z 是非常要好的朋友, 而且他们都对迷宫游戏非常有 ...