设计模式8——结构型模式之桥接模式

定义 :桥接模式 (BridgePattern) ,将抽象部分与它的实现部分分离,使它们都可以独立地变化。

类型:结构型模式。

类图:

参与角色:

  1. Clinet,客户指定组装电脑,指定了最初的接口。
  1. Computer,电脑抽象类,指定了具体安装CPU的接口。
  1. DesktopComputer,具体的台式机电脑,根据主板型号具体实现如何安装CPU
  2. CPU,抽象类,指定连接CPU针脚的接口。
  1. PentiumCore,具体的CPU,具体实现如何连续CPU的针脚。

概述:

        CPU每年都在更新,尤其是像PentiumCore这样两代产品架构的更新,直接导致整个电脑产业链的更新。例如,PentiumCore架构下的CPU针脚数不一样,这就要求匹配的主板也必须与CPU吻合。另外核心显卡也集成到了CPU当中云,这些都会影响到电脑的组装。

        为了保证达到开闭原则,尽量不去修改原有代码,那么针对产品的升级,就必须通过继承来实现。但是电脑产品的升级会涉及到很多部件。如CPU升级了,就要派生一个新的类了。如果主板升级了,也要派生一个新的类。如果声卡升级了,也需要派生一个新的类。或者其中两个部件升级了,也需要派生新的电脑类。随着变化的部件越来越多,可能会产生非常多非常多的派生类,不便于管理。这个时候就需要用到桥接模式。

       桥接模式,将每一个维度的变化都独立出来,并且做成抽象类,通过派生来实现单个维度的升级改变。这样,在客户看来,具体的产品组装接口是没有变,不影响客户端的使用。

       这里的示例,主要是以CPU以及安装CPU这两个维度作一下模拟。

代码示例:

 
#include  "stdafx.h"
#include  <iostream>
using  namespace  std ;
 
class  CCPU
{
public :
     virtual  ~ CCPU ( ) { }
     virtual  void  Connect ( )  =  0 ;
} ;
 
class  CComputer
{
public :
     CComputer ( CCPU *  _pCPU )  :  m_pCPU ( _pCPU ) { }
     virtual  ~ CComputer ( ) { }
     virtual  void  ConnectCPU ( )  =  0 ;
protected :
     CCPU *  m_pCPU ;
} ;
 
class  CDesttopComputer  :  public  CComputer
{
public :
     CDesttopComputer ( CCPU *  _pCPU )  :  CComputer ( _pCPU ) { }
     virtual  void  ConnectCPU ( )
     {
         cout << "CPU" << endl ;
         m_pCPU -> Connect ( ) ;
 
     }
} ;
 
class  CPentiun  :  public  CCPU
{
public :
     virtual  void  Connect ( )
     {
         cout << "CPU" << endl ;
     }
} ;
 
class  CCore  :  public  CCPU
{
public :
     virtual  void  Connect ( )
     {
         cout << "CPU" << endl ;
     }
} ;
 
int  _tmain ( int  argc ,  _TCHAR *  argv [ ])
{
     // 
     CCPU *  pCPU  =  new  CPentiun ( ) ;
     CComputer *  pComputer  =  new  CDesttopComputer ( pCPU ) ;
     pComputer -> ConnectCPU ( ) ;
     delete  pCPU ;
     delete  pComputer ;
 
     // 
     pCPU  =  new  CCore ( ) ;
     pComputer  =  new  CDesttopComputer ( pCPU ) ;
     pComputer -> ConnectCPU ( ) ;
     delete  pCPU ;
     delete  pComputer ;
 
     return  0 ;
}
 
 
注意:  抽象类的析构函数一定要设定为虚函数 , 否则在内存释放的时候可能会有问题

优缺点:

  1. 优点,将实现与抽象分离,具有更好的可扩展性。并且通过组合的方式可以大大提高代码的灵活性。
  2. 缺点,前期较好的识别出可变的维度有一定的困难。

参考资料:

  1. 《设计模式——可复用面向对象软件基础》
  2. Java与模式》
  3. 《大话设计模式》
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计模式是一种经过总结、优化的、可重复使用的设计经验的总结。它是软件工程中一种解决特定问题的可复用方案。设计模式不是一成不变的,而是可以根据不同的需求进行变化,以达到最佳的效果。设计模式可以提高程序的可读性、可维护性、可扩展性,同时也可以提高程序的性能和稳定性。 设计模式可以分为三种类型:创建型模式、结构型模式和行为型模式。创建型模式用于描述对象的创建过程,结构型模式用于描述对象之间的关系,行为型模式用于描述对象的行为和交互。本篇文章将介绍一些常用的设计模式。 1. 工厂模式(Factory Pattern) 工厂模式是一种常用的创建型模式,它使用一个工厂方法来创建对象,而不是通过直接调用构造函数。工厂模式可以隐藏对象的创建过程,使代码更加灵活和易于维护。工厂模式可以分为简单工厂模式、工厂方法模式和抽象工厂模式。 2. 单例模式(Singleton Pattern) 单例模式是一种创建型模式,它保证一个类只有一个实例,并提供一个全局访问点。单例模式可以保证对象的唯一性,避免了多个实例对系统资源的浪费。 3. 代理模式(Proxy Pattern) 代理模式是一种结构型模式,它为一个对象提供一个代理,以控制对这个对象的访问。代理模式可以增加对象的安全性,降低对象的访问成本,同时也可以提高程序的灵活性和可扩展性。 4. 装饰器模式(Decorator Pattern) 装饰器模式是一种结构型模式,它动态地给一个对象添加一些额外的职责,而不需要修改这个对象的代码。装饰器模式可以避免使用子类来扩展对象的功能,从而使代码更加灵活和可扩展。 5. 观察者模式(Observer Pattern) 观察者模式是一种行为型模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象状态发生改变时,会通知所有的观察者对象,使它们能够及时更新自己的状态。 以上是五种常用的设计模式,它们在软件开发中都有着广泛的应用。设计模式可以帮助我们更好地组织代码、降低程序的耦合度、提高程序的可扩展性和可维护性,是一种非常重要的编程技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值