利用桥接模式实现手机品牌和手机软件之间的解耦 C++
来源:互联网 发布:flicker.js 编辑:程序博客网 时间:2024/05/01 12:09
1. 合成/聚合复用原则
在面向对象编程过程中, 继承是一个非常强大的工具, 它体现出子类和父类之间的强耦合关系。对象的继承关系在编译的时候, 就已经决定好了, 无法在运行时候做改变。以至于父类的更改会影响到子类。
聚合: 表示一种较弱的 拥有关系,A 对象可以包含 B 对象, 而B 对象不是 A 的一部分
合成: 表示一种较强的 拥有关系, 体现的是严格的部分和整体的关系, 并且部分和整体的声明周期一般是一致的
合成/ 聚合原则的好处是, 优先使用对象的合成和聚合将有助于保持类的封装,并被集中在单个任务上,这样的话, 类和类的继承层次会保持较小的规模, 并且不太可能会增长成为不可控制的庞然大物。
2.桥接模式
他将抽象部分和实现部分分离开来, 使他们都可以独立的变化。
这里所说的将抽象和他的实现分离, 指的是抽象类和他的派生类用来实现自己的对象, 而不是非得构成一个继承关系。
由于实现的方式可以有很多种, 桥接模式的核心意图就是把这些实现独立出来, 让他们独立的变化, 每种变化的实现不会影响到另外一个的实现, 从而可以灵活的应对需求的变化
UML 图:
code:
handsoft.h
#ifndef _HANDSOFT_H_#define _HANDSOFT_H_#include <iostream>using std::cout;using std::endl;/************************************************************************//* 软件基类 *//************************************************************************/class CHandsetSoft{public: virtual void run() const = 0;};/************************************************************************//* 手机游戏 *//************************************************************************/class CHandsetGame : public CHandsetSoft{public: void run() const override{ cout << "运行手机游戏" << endl; }};/************************************************************************//* 通讯录 *//************************************************************************/class CHandsetContact : public CHandsetSoft{public: void run() const override{ cout << "通讯录 " << endl; }};#endif // _HANDSOFT_H_
handbrand.h
#ifndef _HANDBRAND_H_#define _HANDBRAND_H_#include "handsoft.h"/************************************************************************//* 手机品牌 *//************************************************************************/class CHandBrand{public: virtual void run() const {} void setHandsetSoft(CHandsetSoft * soft){ this->soft = soft; }protected: CHandsetSoft * soft;};/************************************************************************//* N 手机品牌 *//************************************************************************/class HandBrandN : public CHandBrand{public: void run() const { soft->run(); }};/************************************************************************//* M 手机品牌 *//************************************************************************/class HandBrandM : public CHandBrand{public: void run() const { soft->run(); }};#endif // _HANDBRAND_H_
main.cpp
#include "handsoft.h"#include "handbrand.h"#include <iostream>using namespace std;int main(){ CHandBrand * brand = new HandBrandN(); brand->setHandsetSoft(new CHandsetGame()); brand->run(); brand->setHandsetSoft(new CHandsetContact); brand->run(); system("pause"); return 0;}
0 0
- 利用桥接模式实现手机品牌和手机软件之间的解耦 C++
- 手机软件的开发模式
- 手机软件统一 X 桥接模式 X 抽象与实现分离
- 桥接设计模式-手机软件何时统一-大话设计模式
- 【设计模式】手机软件何时统一 ---- 桥接模式
- 设计模式:22 手机软件何时统一_桥接模式
- 手机软件兼容之桥接模式学习笔记[C++版]
- 手机软件兼容之桥接模式学习笔记[C++版]
- 手机软件兼容之桥接模式学习笔记[C++版]
- 第二十二章 手机软件何时统一--桥接模式(读书笔记)
- 利用DNode实现php和nodejs之间的通信
- 利用“工厂模式+反射+配置文件”来实现解耦和
- 利用工厂设计模式实现业务层和dao层的解耦
- 服务收费模式和广告模式在手机软件上的融合
- android中利用代理模式简单实现界面之间的跳转与传值
- 大话设计模式二十二:桥接模式(手机软件何时统一)
- 《大话设计模式》—— 读后感(22)手机软件何时统一——桥接模式
- 《大话设计模式》--手机软件何时统一--桥接模式<Bridge>(22)
- JavaScript提交表单时检查所填是否有效
- 字符设备驱动--定时器
- LeetCode之1—-Two Sum
- T-SQL, Part I: LIKE Pattern
- 基于Maven项目SpringMVC的基本配置
- 利用桥接模式实现手机品牌和手机软件之间的解耦 C++
- J2EE轻量级框架--3.26学习心得
- 特别注意
- MAMP软件的安装和使用
- mysql服务安装
- SDM、ESR、LBF、AAM
- 条件编译指令
- T-SQL, Part II: IMAGE/TEXT Insert
- poj--2104--K-th Number(伴随数组)