23种设计模式之(十)桥接模式(Bridge)
本文主要介绍23种设计模式之组合模式,附详细python/c++示例代码。
- 概念
- 应用场景
- 注意事项
- 代码示例
- 总结
- 代码链接
桥接模式(Bridge)
概念
桥接模式,是构造型的设计模式之一。Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。
GoF对桥接模式的定义是:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
应用场景
(1)如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。
(2)对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。
(3)一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。
代码示例
C++代码示例
/************************************************************************/
/* 设计模式专题
/*
/* 桥接模式
/*
/* Author : zzl
/*
/* 编程环境: window10 vs2010
/*
/* Date : 20180916
/************************************************************************/
#include <iostream>
class Engine
{
public:
virtual void InstallEngine() = 0;
};
class Engine4400cc : public Engine
{
public:
virtual void InstallEngine()
{
printf("i am 4400cc engine ,i am installed successful\n");
}
};
class Engine4500cc : public Engine
{
public:
virtual void InstallEngine()
{
printf("i am 4500cc engine ,i am installed successful\n");
}
};
class Car
{
public:
Car(Engine *engine)
{
this->m_engine = engine;
}
virtual void installEngine() = 0;
protected:
Engine *m_engine;
};
class WBM5 : public Car
{
public:
WBM5(Engine *engine) : Car(engine)
{
;
}
virtual void installEngine()
{
printf("i am WBM5 \n");
m_engine->InstallEngine();
}
};
class WBM6 : public Car
{
public:
WBM6(Engine *engine) : Car(engine)
{
;
}
virtual void installEngine()
{
printf("i am WBM6 \n");
m_engine->InstallEngine();
}
};
void main()
{
//
Engine *engine = NULL;
WBM6 *wbm6 = NULL;
WBM5 *wbm5 = NULL;
engine = new Engine4400cc;
wbm6 = new WBM6(engine);
wbm6->installEngine();
wbm5 = new WBM5(engine);
wbm5->installEngine();
delete wbm6;
delete wbm5;
delete engine;
}
python代码示例
# -*- coding: utf-8 -*-
###################################################################
# 设计模式专题
#
# 桥接模式
#
# Author : zzl
#
# 编程环境: window10 python2.7
#
# Date : 20180916
##################################################################
class Engine(object):
def install_engine(self):
pass
class Engine4400cc(Engine):
def install_engine(self):
print("i am 4400cc engine ,i am installed successful")
class Engine4500cc(Engine):
def install_engine(self):
print("i am 4500cc engine ,i am installed successful")
class Car(object):
def __init__(self):
self.m_engine = engine
def install_engine(self):
pass
class WBM5(Car):
def __init__(self, engine):
self.m_engine = engine
def install_engine(self):
print("i am WBM5 ")
self.m_engine.install_engine()
class WBM6(Car):
def __init__(self, engine):
self.m_engine = engine
def install_engine(self):
print("i am WBM6 ")
self.m_engine.install_engine()
if __name__ == "__main__":
engine = Engine4400cc()
wbm6 = WBM6(engine)
wbm6.install_engine();
wbm5 = WBM5(engine);
wbm5.install_engine()