设计模式之笔记--桥接模式(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 介绍 ...
随机推荐
- Codeforces Round#516 Div.1 翻车记
A:开场懵逼.然后发现有人1min过,于是就sort了一下,于是就过了.正经证明的话,考虑回文串两端点一定是相同的,所以最多有Σcnti*(cnti+1)/2个,cnti为第i种字母出现次数.而sor ...
- 算法语言Scheme修订6报告 R6RS简体中文翻译
算法语言Scheme修订6报告 R6RS简体中文翻译 来源 https://r6rs.mrliu.org/ MICHAEL SPERBERR. KENT DYBVIG, MATTHEW FLATT ...
- 快速搭建http服务:共享文件--Java的我,不知Python你的好
在 Linux 服务器上或安装了 Python 的机器上, 我们可以在指定的文件目录下,使用 python -m SimpleHTTPServer 快速搭建一个http服务,提供一个文件浏览的web ...
- HDU3949 XOR (线性基)
HDU3949 XOR Problem Description XOR is a kind of bit operator, we define that as follow: for two bin ...
- ZOJ1586:QS Network (最小生成树)
QS Network 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1586 Description: In th ...
- bzoj 1098 [POI2007]办公楼biu bfs+补图+双向链表
[POI2007]办公楼biu Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1543 Solved: 743[Submit][Status][Di ...
- ASP.NET基础学习(暴力破解密码)
首先写出一段登陆程序: //ashx端 <%@ WebHandler Language="C#" Class="AddCalation" %> us ...
- ACM1558两线段相交判断和并查集
Segment set Problem Description A segment and all segments which are connected with it compose a seg ...
- ACM1004 Let the balloons fly
These code is for the problem "Let the balloons Fly" in ACM 1004 which need deal with stri ...
- HDU1914 稳定婚姻匹配
The Stable Marriage Problem Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (J ...