设计模式学习笔记--Bridge桥接模式

【GOF95】在提出桥梁模式的时候指出,桥接模式是"将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化"。这句话有三个关键词,也就是抽象化、实现化和脱耦。

抽象化:存在于多个实体中的共同的概念性联系,就是抽象化。作为一个过程,抽象化就是忽略一些信息,从而把不同的实体当做同样的实体对待
实现化:抽象化给出的具体实现,就是实现化。
脱耦:所谓耦合,就是两个实体的行为的某种强关联。而将它们的强关联去掉,就是耦合的解脱,或称脱耦。在这里,脱耦是指将抽象化和实现化之间的耦合解脱开,或者说是将它们之间的强关联改换成弱关联。将两个角色之间的继承关系改为聚合关系,就是将它们之间的强关联改换成为弱关联。因此,桥梁模式中的所谓脱耦,就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以相对独立地变化。这就是桥梁模式的用意。

桥接模式(Bridge)的为了使开发者完全抽象实现之间的模型,使用多重继承的方式解耦。这就强调了需要出现的三个标志:
  1:主操作纯虚类,主要定义实现的方法以及构造时(此处可以灵活)的使用的虚类对象。
  2:实现中使用的对象。
  3:桥接以上两者,然后按照纯虚方法调用
直接进入例子:
程序如下图:
             

一、定义两个抽象类AbstractITPerson与AbstractCompany,其中AbstractITPerson抽象类中用到了AbstractCompany类对象                       
AbstractITPerson

Code

AbstractCompany

Code

二、定义ITPersons与Companies,它们分别是AbstractITPerson与AbstractCompany两个维度的扩展
ITPersons类

Code

Companies类

Code

三、应用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BridgeITWorker
{
    
class Program
    {
        
static void Main(string[] args)
        {
            Console.WriteLine(
"IBM的IT工作人员:");
            AbstractITPerson absITperson 
= new WebDeveloper(new IBMCompany());
            Console.WriteLine(absITperson.Company.GetCompanyName());
            absITperson.Studying();
            absITperson.Working();
            Console.WriteLine();

            Console.WriteLine(
"MicroSoft的IT工作人员:");
            absITperson 
= new DataBaseManager(new MicrosoftCompany());
            Console.WriteLine(absITperson.Company.GetCompanyName());
            absITperson.Studying();
            absITperson.Working();
            Console.WriteLine();

            Console.WriteLine(
"Oracle的IT工作人员:");
            absITperson 
= new DataBaseManager(new OracleCompany());
            Console.WriteLine(absITperson.Company.GetCompanyName());
            absITperson.Studying();
            absITperson.Working();

            Console.ReadLine();
        }
    }
}

以上的桥接模式的实现主要有三个关系:AbstractITPerson,AbstractCompany,主实现,可以看到AbstractITPerson完全隐藏了其实现的具体细节,AbstractCompany也隐藏了其具体实现的细节。这就是在在两个纬度上的解耦。 如此做法,也是为了程序的可扩展性。
运行效果如下:
             

前往:设计模式学习笔记清单
posted @ 2009-10-01 21:28  wsdj  阅读(718)  评论(0编辑  收藏  举报