博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式4——桥接模式
阅读量:5077 次
发布时间:2019-06-12

本文共 1784 字,大约阅读时间需要 5 分钟。

当物体有几种不同的属性时,这时类的继承就会变的多样。

例如,一款手机按类型可分为功能机和智能机,按颜色可分为黑色、白色、红色等,按品牌可分为苹果、三星、小米等。

当属性越多,则需要创建的类就更多,使用桥接模式能够大大降低问题的复杂性,并且能够极大程度降低耦合。

 

示例代码:

Bridge.h内容

1 #ifndef Bridge_H_H 2 #define Bridge_H_H 3  4 #include 
5 using namespace std; 6 7 class Color 8 { 9 public:10 Color() {}11 virtual ~Color() {}12 virtual void display() = 0;13 };14 15 class ColorWhite : public Color16 {17 public:18 virtual void display() { cout << "Color is White!" << endl; }19 };20 21 class ColorBlack : public Color22 {23 public:24 virtual void display() { cout << "Color is Black!" << endl; };25 };26 27 class Phone28 {29 public:30 Phone() : color(NULL) {}31 virtual ~Phone() {}32 virtual void display() { color->display(); }33 void setColor(Color *color0){34 color = color0;35 }36 private:37 Color *color;38 };39 40 class FunctionalPhone : public Phone41 {42 public:43 virtual void display(){44 cout << "Type is Functional! ";45 Phone::display();46 }47 };48 49 class IntelligentPhone : public Phone50 {51 public:52 virtual void display(){53 cout << "Type is Intelligient! ";54 Phone::display();55 }56 };57 58 void BridgeTest()59 {60 Color *color1 = new ColorWhite();61 Color *color2 = new ColorBlack();62 63 Phone *phone1 = new FunctionalPhone();64 Phone *phone2 = new IntelligentPhone();65 66 phone1->setColor(color1);67 phone1->display();68 phone1->setColor(color2);69 phone1->display();70 71 phone2->setColor(color1);72 phone2->display();73 phone2->setColor(color2);74 phone2->display();75 }76 77 #endif

运行结果:

所设计的颜色和类型分别只有两个,优势体现不明显,当每种类型继承较多时,优势将会很明显。

假如类型和颜色分别有5种和7种,则5+7比5*7要小很多,结构也会更加清晰。

转载于:https://www.cnblogs.com/MiniHouse/p/3974689.html

你可能感兴趣的文章
【POJ2699】The Maximum Number of Strong Kings(网络流)
查看>>
spring boot配置跨域
查看>>
BZOJ 1996 合唱队(DP)
查看>>
进击吧!阶乘——大数乘法
查看>>
安卓学习资料推荐-25
查看>>
Mysql数据库备份和还原常用的命令
查看>>
关于退出当前页面在火狐的一些问题
查看>>
【项目实施】项目考核标准
查看>>
spring-aop AnnotationAwareAspectJAutoProxyCreator类
查看>>
经典入门_排序
查看>>
Redis Cluster高可用集群在线迁移操作记录【转】
查看>>
二、spring中装配bean
查看>>
VIM工具
查看>>
javascript闭包
查看>>
@Column标记持久化详细说明
查看>>
创建本地yum软件源,为本地Package安装Cloudera Manager、Cloudera Hadoop及Impala做准备...
查看>>
mysql8.0.13下载与安装图文教程
查看>>
站立会议08(冲刺2)
查看>>
url查询参数解析
查看>>
http://coolshell.cn/articles/10910.html
查看>>