您现在使用的中文变体可能会影响一些词语繁简转换的效果。建议您根据您的偏好切换到下列变体之一： 大陆简体 、 香港繁體 、 澳門繁體 、 大马简体 、 新加坡简体 、 臺灣正體 。（ 不再提示 | 了解更多 ）
維基百科志願者互聯交流群 （ Telegram ： @wikipedia_zh_n 、 Discord 及 IRC ： #wikipedia-zh IRC:// 互联）歡迎大家加入。 [ 关闭 ]
橋接模式 [ 编辑 ]
维基百科，自由的百科全书
跳到导航
跳到搜索
橋接模式 是 軟件設計模式 中最複雜的模式之一，它把事物對象和其具體行爲、具體特徵分離開來，使它们可以各自独立的变化。事物對象僅是一個抽象的概念。如“圓形”、“三角形”歸于抽象的“形狀”之下，而“畫圓”、“畫三角”歸于實現行爲的“畫圖”類之下，然後由“形狀”調用“畫圖”。
目录
1 結構
2 示例
2.1 Java
2.2 C#
2.3 用generics類庫的C#
2.4 C++
2.5 Python
結構 [ 编辑 ]
Abstraction
定義抽象的介面
該介面包含實現具體行爲、具體特徵的Implementor介面
Refined Abstraction
抽象介面Abstraction的子類，依舊是一個抽象的事物名
Implementor
定義具體行爲、具體特徵的應用介面
ConcreteImplementor
實現Implementor介面
示例 [ 编辑 ]
下列各語言的代碼都用於寫出兩個不同的圓的坐標和半徑。
API1.circle at 1:2 7.5
API2.circle at 5:7 27.5
Java [ 编辑 ]
/** "Implementor" */
interface DrawingAPI
{
public void drawCircle ( double x , double y , double radius );
}
/** "ConcreteImplementor" 1/2 */
class DrawingAPI1 implements DrawingAPI
{
public void drawCircle ( double x , double y , double radius )
{
System . out . printf ( "API1.circle at %f:%f radius %f\n" , x , y , radius );
}
}
/** "ConcreteImplementor" 2/2 */
class DrawingAPI2 implements DrawingAPI
{
public void drawCircle ( double x , double y , double radius )
{
System . out . printf ( "API2.circle at %f:%f radius %f\n" , x , y , radius );
}
}
/** "Abstraction" */
interface Shape
{
public void draw (); // low-level
public void resizeByPercentage ( double pct ); // high-level
}
/** "Refined Abstraction" */
class CircleShape implements Shape
{
private double x , y , radius ;
private DrawingAPI drawingAPI ;
public CircleShape ( double x , double y , double radius , DrawingAPI drawingAPI )
{
this . x = x ; this . y = y ; this . radius = radius ;
this . drawingAPI = drawingAPI ;
}
// low-level i.e. Implementation specific
public void draw ()
{
drawingAPI . drawCircle ( x , y , radius );
}
// high-level i.e. Abstraction specific
public void resizeByPercentage ( double pct )
{
radius *= pct ;
}
}
/** "Client" */
class BridgePattern {
public static void main ( String [] args )
{
Shape [] shapes = new Shape [ 2 ] ;
shapes [ 0 ] = new CircleShape ( 1 , 2 , 3 , new DrawingAPI1 ());
shapes [ 1 ] = new CircleShape ( 5 , 7 , 11 , new DrawingAPI2 ());
for ( Shape shape : shapes )
{
shape . resizeByPercentage ( 2.5 );
shape . draw ();
}
}
}
C# [ 编辑 ]
using System ;
/** "Implementor" */
interface IDrawingAPI {
void DrawCircle ( double x , double y , double radius );
}
/** "ConcreteImplementor" 1/2 */
class DrawingAPI1 : IDrawingAPI {
public void DrawCircle ( double x , double y , double radius )
{
System . Console . WriteLine ( "API1.circle at {0}:{1} radius {2}" , x , y , radius );
}
}
/** "ConcreteImplementor" 2/2 */
class DrawingAPI2 : IDrawingAPI
{
public void DrawCircle ( double x , double y , double radius )
{
System . Console . WriteLine ( "API2.circle at {0}:{1} radius {2}" , x , y , radius );
}
}
/** "Abstraction" */
interface IShape {
void Draw (); // low-level (i.e. Implementation-specific)
void ResizeByPercentage ( double pct ); // high-level (i.e. Abstraction-specific)
}
/** "Refined Abstraction" */
class CircleShape : IShape {
private double x , y , radius ;
private IDrawingAPI drawingAPI ;
public CircleShape ( double x , double y , double radius , IDrawingAPI drawingAPI )
{
this . x = x ; this . y = y ; this . radius = radius ;
this . drawingAPI = drawingAPI ;
}
// low-level (i.e. Implementation-specific)
public void Draw () { drawingAPI . DrawCircle ( x , y , radius ); }
// high-level (i.e. Abstraction-specific)
public void ResizeByPercentage ( double pct ) { radius *= pct ; }
}
/** "Client" */
class BridgePattern {
public static void Main ( string [] args ) {
IShape [] shapes = new IShape [ 2 ];
shapes [ 0 ] = new CircleShape ( 1 , 2 , 3 , new DrawingAPI1 ());
shapes [ 1 ] = new CircleShape ( 5 , 7 , 11 , new DrawingAPI2 ());
foreach ( IShape shape in shapes ) {
shape . ResizeByPercentage ( 2.5 );
shape . Draw ();
}
}
}
用generics類庫的C# [ 编辑 ]
using System ;
/** "Implementor" */
interface IDrawingAPI {
void DrawCircle ( double x , double y , double radius );
}
/** "ConcreteImplementor" 1/2 */
struct DrawingAPI1 : IDrawingAPI {
public void DrawCircle ( double x , double y , double radius )
{
System . Console . WriteLine ( "API1.circle at {0}:{1} radius {2}" , x , y , radius );
}
}
/** "ConcreteImplementor" 2/2 */
struct DrawingAPI2 : IDrawingAPI
{
public void DrawCircle ( double x , double y , double radius )
{
System . Console . WriteLine ( "API2.circle at {0}:{1} radius {2}" , x , y , radius );
}
}
/** "Abstraction" */
interface IShape {
void Draw (); // low-level (i.e. Implementation-specific)
void ResizeByPercentage ( double pct ); // high-level (i.e. Abstraction-specific)
}
/** "Refined Abstraction" */
class CircleShape < T > : IShape
where T : struct , IDrawingAPI
{
private double x , y , radius ;
private static IDrawingAPI drawingAPI = new T ();
public CircleShape ( double x , double y , double radius )
{
this . x = x ; this . y = y ; this . radius = radius ;
}
// low-level (i.e. Implementation-specific)
public void Draw () { drawingAPI . DrawCircle ( x , y , radius ); }
// high-level (i.e. Abstraction-specific)
public void ResizeByPercentage ( double pct ) { radius *= pct ; }
}
/** "Client" */
class BridgePattern {
public static void Main ( string [] args ) {
IShape [] shapes = new IShape [ 2 ];
shapes [ 0 ] = new CircleShape < DrawingAPI1 > ( 1 , 2 , 3 );
shapes [ 1 ] = new CircleShape < DrawingAPI2 > ( 5 , 7 , 11 );
foreach ( IShape shape in shapes ) {
shape . ResizeByPercentage ( 2.5 );
shape . Draw ();
}
}
}
C++ [ 编辑 ]
#include <iostream>
using namespace std ;
/* Implementor*/
class DrawingAPI {
public :
virtual void drawCircle ( double x , double y , double radius ) = 0 ;
virtual ~ DrawingAPI () {}
};
/* Concrete ImplementorA*/
class DrawingAPI1 : public DrawingAPI {
public :
void drawCircle ( double x , double y , double radius ) {
cout << "API1.circle at " << x << ':' << y << ' ' << radius << endl ;
}
};
/* Concrete ImplementorB*/
class DrawingAPI2 : public DrawingAPI {
public :
void drawCircle ( double x , double y , double radius ) {
cout << "API2.circle at " << x << ':' << y << ' ' << radius << endl ;
}
};
/* Abstraction*/
class Shape {
public :
virtual ~ Shape () {}
virtual void draw () = 0 ;
virtual void resizeByPercentage ( double pct ) = 0 ;
};
/* Refined Abstraction*/
class CircleShape : public Shape {
public :
CircleShape ( double x , double y , double radius , DrawingAPI * drawingAPI ) :
m_x ( x ), m_y ( y ), m_radius ( radius ), m_drawingAPI ( drawingAPI )
{}
void draw () {
m_drawingAPI -> drawCircle ( m_x , m_y , m_radius );
}
void resizeByPercentage ( double pct ) {
m_radius *= pct ;
}
private :
double m_x , m_y , m_radius ;
DrawingAPI * m_drawingAPI ;
};
int main ( void ) {
DrawingAPI1 dap1 ;
DrawingAPI2 dap2 ;
CircleShape circle1 ( 1 , 2 , 3 , & dap1 );
CircleShape circle2 ( 5 , 7 , 11 , & dap2 );
circle1 . resizeByPercentage ( 2.5 );
circle2 . resizeByPercentage ( 2.5 );
circle1 . draw ();
circle2 . draw ();
return 0 ;
}
Python [ 编辑 ]
# Implementor
class DrawingAPI :
def drawCircle ( x , y , radius ):
pass
# ConcreteImplementor 1/2
class DrawingAPI1 ( DrawingAPI ):
def drawCircle ( self , x , y , radius ):
print "API1.circle at %f : %f radius %f " % ( x , y , radius )
# ConcreteImplementor 2/2
class DrawingAPI2 ( DrawingAPI ):
def drawCircle ( self , x , y , radius ):
print "API2.circle at %f : %f radius %f " % ( x , y , radius )
# Abstraction
class Shape :
# low-level
def draw ( self ):
pass
# high-level
def resizeByPercentage ( self , pct ):
pass
# Refined Abstraction
class CircleShape ( Shape ):
def __init__ ( self , x , y , radius , drawingAPI ):
self . __x = x
self . __y = y
self . __radius = radius
self . __drawingAPI = drawingAPI
# low-level i.e. Implementation specific
def draw ( self ):
self . __drawingAPI . drawCircle ( self . __x , self . __y , self . __radius )
# high-level i.e. Abstraction specific
def resizeByPercentage ( self , pct ):
self . __radius *= pct
def main ():
shapes = [
CircleShape ( 1 , 2 , 3 , DrawingAPI1 ()),
CircleShape ( 5 , 7 , 11 , DrawingAPI2 ())
]
for shape in shapes :
shape . resizeByPercentage ( 2.5 )
shape . draw ()
if __name__ == "__main__" :
main ()
[ 隐藏 ] 查 论 编 软件设计模式 设计模式 创建型
抽象工厂
生成器
工厂方法
惰性初始
原型
单例
结构型
适配器
桥接
Composite （英语 ： Composite pattern ）
修饰
外观
享元
代理
行为型
责任链
命令
Interpreter （英语 ： Interpreter pattern ）
迭代器
中介者
Memento （英语 ： Memento pattern ）
观察者
Specification （英语 ： Specification pattern ）
State （英语 ： State pattern ）
策略
模板方法
访问者
并行模式
主动对象 （英语 ： Active object ）
阻止 （英语 ： Balking pattern ）
Binding properties （英语 ： Binding properties pattern ）
双重检查锁定模式
异步方法调用
Future与promise
Guarded suspension （英语 ： Guarded suspension ）
Join （英语 ： Join-pattern ）
锁
Messaging （英语 ： Messaging pattern ）
监视器
Proactor （英语 ： Proactor pattern ）
反应器
读写锁
调度
线程池
线程局部存储
架构模式
ADR （英语 ： Action–Domain–Responder ）
主动记录
Broker （英语 ： Broker pattern ）
主從式架構
cbd
DAO
DDD
Data transfer object （英语 ： Data transfer object ）
Front controller （英语 ： Front controller ）
Identity map （英语 ： Identity map pattern ）
Interceptor （英语 ： Interceptor pattern ）
控制反转
MVC
微服務
MVP
單體式應用程式
多层架构
n -tier （英语 ： Multitier architecture ）
Naked objects （英语 ： Naked objects ）
P2P
发布/订阅
REST
SOA
Specification （英语 ： Specification pattern ）
云
分布式
断路器
CQRS （英语 ： Command–query separation ）
补偿交易 （英语 ： Compensating Transaction ）
索引表
领导者选举 （英语 ： Leader election ）
MapReduce
物化视图 （英语 ： Materialized view ）
管道
过滤器 （英语 ： Filter (software) ）
发布/订阅
分片 （英语 ： Shard (database architecture) ）
节流 （英语 ： Throttling process (computing) ）
其他模式
Blackboard （英语 ： Blackboard design pattern ）
Business delegate （英语 ： Business delegate pattern ）
Composite entity （英语 ： Composite entity pattern ）
委托
依赖注入
Intercepting filter （英语 ： Intercepting filter pattern ）
惰性載入
Method chaining （英语 ： Method chaining ）
模拟对象
空对象
对象池
Servant （英语 ： Servant (design pattern) ）
Twin （英语 ： Twin pattern ）
Type tunnel （英语 ： Type Tunnel pattern ）
书籍
设计模式：可复用面向对象软件的基础
企业集成模式 （英语 ： Enterprise Integration Patterns ）
人物
克里斯托佛·亚历山大
埃里希·伽瑪
Ralph Johnson （英语 ： Ralph Johnson (computer scientist) ）
John Vlissides （英语 ： John Vlissides ）
葛來迪·布區
肯特·貝克
沃德·坎宁安
马丁·福勒
Robert Martin （英语 ： Robert Cecil Martin ）
Jim Coplien （英语 ： Jim Coplien ）
Douglas Schmidt （英语 ： Douglas C. Schmidt ）
Linda Rising
社区
The Hillside Group （英语 ： The Hillside Group ）
The Portland Pattern Repository （英语 ： Portland Pattern Repository ）
取自“ https://zh.wikipedia.org/w/index.php?title=橋接模式&oldid=65420869 ”
分类 ：​ 软件设计模式
导航菜单
个人工具
没有登录 讨论 贡献 创建账号 登录
命名空间
条目 讨论
不转换
不转换 简体 繁體 大陆简体 香港繁體 澳門繁體 大马简体 新加坡简体 臺灣正體
查看
阅读 编辑 查看历史
更多
导航
首页 分类索引 特色内容 新闻动态 最近更改 随机条目 资助维基百科
帮助
帮助 维基社群 方针与指引 互助客栈 知识问答 字词转换 IRC即时聊天 联络我们 关于维基百科
工具
链入页面 相关更改 上传文件 特殊页面 固定链接 页面信息 引用本页 维基数据项目 短链接
打印/导出
下载为PDF 打印页面
在其他项目中
维基共享资源
其他语言
العربية Български Català Deutsch English Español فارسی Français Galego Magyar Հայերեն Italiano 日本語 한국어 Nederlands Polski Português Русский Svenska Українська Tiếng Việt 还有12种语言
编辑链接
本页面最后修订于2021年4月30日 (星期五) 11:17。
本站的全部文字在 知识共享 署名-相同方式共享 4.0协议 之条款下提供，附加条款亦可能应用。（请参阅 使用条款 ）
Wikipedia®和维基百科标志是 维基媒体基金会 的注册商标；维基™是维基媒体基金会的商标。
维基媒体基金会是按美国国內稅收法501(c)(3)登记的 非营利慈善机构 。
隐私政策
关于维基百科
免责声明
手机版视图
开发者
统计
Cookie声明
编辑预览设置