结构型模式之桥接模式实现
来源:互联网 发布:vb format 日期格式 编辑:程序博客网 时间:2024/06/15 00:58
概念
桥接模式是构造性的设计模式之一。它是基于类的最小设计原则,通过使用封装、聚合以及继承等行为来让不同的职责承担不同的责任。它的主要特点是把抽象与行为实现分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。
角色和职责
client:桥接模式的使用者;
Abstration:抽象类接口,维护对行为实现的引用;
Refined Abstration: Abstration子类;
Implementer:行为实现类接口(Abstration接口定义了基于Implementer接口的更高层次的操作);
ConcreteImplementor: Implementor子类。
适用于:桥接模式是将抽象部分和实现部分分离(解耦合),使他们都可以独立的变化。
车 安装 发动机:不同型号的车,安装不同型号的发动机
图形 填 颜色: 不同形状的图形,填充上 不同的颜色
将“车 安装 发动机”这个抽象 和 实现进行分离;两个名字就设计两个类;
将“图形 填 颜色”这个抽象 和 实现 进行分离;两个名字就设计两个类
案例
1.问题引出:不同的车型,不同型号,安装不同类型的发动机,会引起子类的泛滥
#include<iostream>using namespace std;class MyCar1{public: virtual void installEngine() = 0;};class BMW5:public MyCar1{public: virtual void installEngine() { cout << "BMW5 350CC" << endl; }};class BMW6:public MyCar1{public: virtual void installEngine() { cout << "BMW6 400CC" << endl; }};class Jeep11:public MyCar1{public: virtual void installEngine() { cout << "Jeep11 1100CC" << endl; }};class Jeep12:public MyCar1{public: virtual void installEngine() { cout << "Jeep12 1200CC" << endl; }};//试想,不同的车型,不同型号,安装不同类型的发动机,会引起子类的泛滥。int main(void){ Jeep12 *j12 = new Jeep12(); j12->installEngine(); delete j12; return 0;}
2.改进1:将车安装封装,会不符合开闭原则
#include<iostream>using namespace std;class MyCar2{public: virtual void installEngine3500() = 0; virtual void installEngine4000() = 0; virtual void installEngine1100() = 0; virtual void installEngine1200() = 0; };class BMW:public MyCar2{public: virtual void installEngine3500() { cout << "3500CC" << endl; } virtual void installEngine4000() { cout << "4000CC" << endl; } virtual void installEngine1100() { cout << "1100CC" << endl; } virtual void installEngine1200() { cout << "1200CC" << endl; }};int main(void){ BMW *bmw5 = new BMW(); bmw5->installEngine3500(); return 0;}
3.改进2:需要把抽象和行为实现分开
#include<iostream>using namespace std;class Engine{public: virtual void installEngine() = 0;};class Engine4000{public: virtual void installEngine() { cout << "安装发动机 Engine4000" << endl; }};class Engine3500{public: virtual void installEngine() { cout << "安装发动机 Engine3500" << endl; }};class Car{public: Car(Engine *pengine) { m_engine = pengine; } virtual void installEngine() = 0;protected: Engine *m_engine;};class BMW7{public: BMW7(Engine *p):Car(p) { } //注意车的安装 和 发动机的安装 不同之处 virtual void installEngine() { cout << "BMW7"; m_engine->installEngine(); }};void main163(){ Engine4000 *e4000 = new Engine4000(); BMW7 *bmw7 = new BMW7(e4000); bmw7->installEngine(); delete bmw7; delete e4000;}int main(void){ main163(); return 0;}
阅读全文
1 0
- 结构型模式之桥接模式实现
- 结构型模式之桥接模式
- 结构型模式之桥接模式
- 结构型模式之桥接模式
- 结构型模式之桥接模式
- 结构型模式之代理模式实现
- 结构型模式之装饰模式实现
- 结构型模式之组合模式实现
- 结构型模式之适配器模式实现
- 结构型模式之外观模式实现
- java设计模式(结构型)之桥接模式
- 结构型模式之桥接模式(Bridge)
- 设计模式(结构型)之桥接模式(Bridge Pattern)
- 设计模式-结构型之桥接模式
- 结构型模式之二——桥接模式
- 结构型:设计模式之桥接模式(七)
- 【设计模式】结构型模式之桥接Bridge
- 结构型模式之——桥接模式
- leetcode 118. Pascal's Triangle
- Java for Web学习笔记(六二):Controller替代Servlet(4)方法返回值
- DATA WAREHOUSE
- 死锁问题
- Jquery AJAX 跨域POST 请求
- 结构型模式之桥接模式实现
- 开发工具
- Android中view的onTouch&onClick事件分发机制详解
- postgresql基本使用语句(持续更新)
- tensorflow55 《TensorFlow技术解析与实战》16 TensorFlow Debugger
- Java 多态性讲解
- 86. Partition List
- 2017 计蒜之道 复赛 腾讯消消乐【状压dp】
- CiA Draft Standard 301 Version