桥接模式讲解及例子
桥接模式(Bridge)

桥接模式(Bridge)1 场景问题1.1 发送提示消息考虑这样一个实际的业务功能:发送提示消息。
基本上所有带业务流程处理的系统都会有这样的功能,比如某人有新的工作了,需要发送一条消息提示他。
从业务上看,消息又分成普通消息、加急消息和特急消息多种,不同的消息类型,业务功能处理是不一样的,比如加急消息是在消息上添加加急,而特急消息除了添加特急外,还会做一条催促的记录,多久不完成会继续催促。
从发送消息的手段上看,又有系统内短消息、手机短消息、邮件等等。
现在要实现这样的发送提示消息的功能,该如何实现呢?1.2 不用模式的解决方案1:实现简化版本先考虑实现一个简单点的版本,比如:消息先只是实现发送普通消息,发送的方式呢,先实现系统内短消息和邮件。
其它的功能,等这个版本完成过后,再继续添加,这样先把问题简单化,实现起来会容易一点。
(1)由于发送普通消息会有两种不同的实现方式,为了让外部能统一操作,因此,把消息设计成接口,然后由两个不同的实现类,分别实现系统内短消息方式和邮件发送消息的方式。
此时系统结构如图1所示:图1 简化版本的系统结构示意图下面看看大致的实现示意。
(2)先来看看消息的统一接口,示例代码如下:Java代码1./**2. * 消息的统一接口3. */4.public interface Message {5. /**6. * 发送消息7. * @param message 要发送的消息内容8. * @param toUser 消息发送的目的人员9. */10. public void send(String message,String toUser);11.}(3)再来分别看看两种实现方式,这里只是为了示意,并不会真的去发送Email 和站内短消息,先看站内短消息的方式,示例代码如下:Java代码1./**2. * 以站内短消息的方式发送普通消息3. */4.public class CommonMessageSMS implements Message{5. public void send(String message, String toUser) {6. System.out.println("使用站内短消息的方式,发送消息'"7.+message+"'给"+toUser);8. }9.}同样的,实现以Email的方式发送普通消息,示例代码如下:Java代码1./**2. * 以Email的方式发送普通消息3. */4.public class CommonMessageEmail implements Message{5. public void send(String message, String toUser) {6. System.out.println("使用Email的方式,发送消息'"7.+message+"'给"+toUser);8. }9.}2:实现发送加急消息上面的实现,看起来很简单,对不对。
无线桥接图解(集中三种案例)概要

无线组网无线桥接图解(集中三种案例)目录:1、方法一:都带WDS功能的路由器实现无线桥接TP-link 无线路由器设置方法图解_无线桥接设置2、方法二:都只有Bridge功能,而没有WDS功能的路由器实现无线桥接TP-LINK无线组网――只有Bridge功能无线桥接图解3、方法三:1个带WDS功能另一个Bridge功能路由器实现无线桥接4、需要注意几点5、无线路由器应用的几种模式1.AP模式2.无线客户端模式3.点对点桥接模式(适用无线将2个有线局域网连接在一起)4.点对点桥接模式(无线将多个有线局域网连接在一起)5.无线中继模式本人搜集整理的比较粗,但集中起来比较大家学习,请勿用于商用。
方法一:都带WDS功能的路由器实现无线桥接TP-link 无线路由器设置方法图解_无线桥接设置详细出处参考:file:///C:/Documents%20and%20Settings/Administrator/桌面/TP-link%20无线路由器WDS设置方法图解_无线桥接设置_网络通讯_软件教学_脚本之家.htm随着无线网络的发展,现在越来越多的公司及企业都已经开始布局无线局域网,今天我们主要介绍下适合中小企业的无线路由器桥接或WDS功能。
文章以TP-link WR841N无线路由器设置为例,其它路由器参考设置思路进行设置。
上图所示为一小型企业无线网络,A、B、C三个部门如果只使用1个无线路由器,可能会出现一些计算机搜到信号很弱或者搜索不到信号,导致无法连接无线网络。
解决方法是:A、B、C三个部门各自连接一台无线路由器,三个无线路由器通过WDS连接就可以实现整个区域的完美覆盖、消除盲点。
配置思想:无线路由器B作为中心无线路由器,无线路由器A、C与无线路由器B建立WDS连接。
步骤如下:无线路由器的基本设置请参考:tp link无线路由器设置一、中心无线路由器B设置登陆无线路由器设置B管理界面,在无线设置-基本设置中设置“SSID号”、“信道”,如图:在“无线设置”——“无线安全设置”中设置无线信号加密信息记录无线路由器B设置后的SSID、信道和加密设置信息,在后续无线路由器A、C的配置中需要应用。
路由器常用的四种桥接方式

路由器常用的四种桥接方式方法一:接副路由器的WAN口1. 网线接法1) 首先确认路由器的WAN口和LAN口。
2) 网线一头接主路由器的LAN口,一头接副路由器的WAN口。
2. 先配置副路由器,这时先不要插入WAN口的线。
电脑接副路由器的LAN口(或者手机连接路由器WiFi),登陆路由器,改副路由器的IP地址。
一般在网络参数--LAN口设置下。
保存后须重启。
如主路由器IP192.168.1.1 ,副路由器就需要改为192.168.2.1或其他网段IP注:主路由器和副路由器需改成不同网段的IP,否则IP冲突桥接路由器无法上网。
改完需要重启,重启后要用改后的IP才能登录副路由器。
重启后重新登陆路由器。
3.打开WAN口设置。
WAN口连接设置可选择静态IP或动态IP。
1)选择动态IP后其他都不用设置。
2)选择静态IP须输入IP(从主路由器上获取的IP,自己设置,但IP 不可是主路由器DHCP分配范围内及网内其他设备占用的IP。
) 子网掩码都是255.255.255.0网关是主路由器地址。
DNS服务器建议输入主路由器wan状态获取到的DNS地址。
方法二:接副路由器的LAN口1.网线的接法网线一头接主路由器的LAN口,一头接副路由器的LAN口。
这样接法相当于将路由器用作交换机。
2.配置副路由器,这时先不要插入LAN口的线。
电脑接副路由器的LAN口,登陆路由器,最好改掉副路由器的IP 地址,方便以后需要登陆。
注:副路由器需改成主路由器同网段的不同IP,并且IP不可是主路由器DHCP分配范围内及网内其他设备占用的IP。
改完需要重启,重启后要用改后的IP才能登录副路由器。
3.关闭DHCP服务器点击不启用,保存即可。
注:关闭DHCP主要为防止自动获取到的IP和网内其他设备冲突。
大部分路由器默认的DHCP分配范围一样。
方法三:路由器无线中继1. 用电脑或手机连接路由器,查询路由器ip2. 进入路由器设置界面。
由于大多数路由器都是以192.168.1.1进入设置界面的。
无线路由器桥接方法

无线路由器桥接方法无线路由器桥接是将两个或多个无线路由器连接在一起,以扩大无线网络的覆盖范围或增加无线网络的容量。
桥接方法有很多种,下面我将介绍几种比较常用的无线路由器桥接方法。
1. 无线桥接模式(Wireless Bridge Mode)无线桥接模式是一种最常见的无线路由器桥接方法。
在这种模式下,一个无线路由器充当主路由器,其他的无线路由器作为从路由器桥接到主路由器。
主路由器连接到互联网,并为所有连接到它的无线设备提供网络访问。
从路由器通过无线信号连接到主路由器,并将其扩展的无线信号传播到其他设备。
这种方法非常适用于扩大无线网络的覆盖范围。
2. 有线桥接模式(Wired Bridge Mode)有时候,由于环境限制或其他原因,无法通过无线信号进行桥接。
此时,可以选择使用有线桥接模式。
在有线桥接模式下,主路由器和从路由器通过以太网电缆连接在一起,从路由器将网络信号传输到其他设备。
这种方法的优点是稳定性高,不受无线信号干扰的影响,适合对网络信号质量要求较高的场合。
3. 中继模式(Repeater Mode)中继模式是一种通过接收主路由器发出的无线信号,并在同一频段上转发信号的桥接方法。
中继器一般放置在主路由器和接收设备之间,可以增强无线信号的传输范围。
但是,中继模式会降低网络性能,因为它需要将信号转发两次。
因此,只适合用于扩大无线网络覆盖范围,而不适用于要求高速稳定连接的场合。
4. WDS桥接(WDS Bridge)WDS(无线分布式系统)桥接是一种通过无线信号连接多个无线路由器的桥接方法。
主路由器和从路由器通过WDS协议进行通信,并通过无线信号在相互之间传输数据。
这种方法可以扩展无线网络并减少信号干扰,但需要设备支持WDS 功能才能实现。
以上介绍了几种常见的无线路由器桥接方法,根据实际情况选择合适的方法可以扩大无线网络的覆盖范围或增加无线网络的容量。
无论选择哪种方法,都需要在配置无线路由器时正确设置桥接模式,并确保所有设备在同一无线频段上运行,避免信号干扰。
桥接模式讲解

桥接模式讲解嘿,咱今儿就来说说桥接模式。
你说这桥接模式啊,就好像是在不同的世界之间搭起一座神奇的桥。
想象一下,有两个完全不同的地方,一边是各种奇奇怪怪的形状,另一边是五颜六色的色彩。
如果没有这座桥,它们就各自为政,谁也不理谁。
但有了桥接模式这座桥呢,它们就能相互连接,产生出各种奇妙的组合。
咱就拿画画来打个比方吧。
形状就像是线条、轮廓,而色彩呢,就是那让画面变得绚丽多彩的颜料。
如果没有一个好的方式把它们结合起来,那画出来的东西可能就会很奇怪,对吧?桥接模式就是让这两者能够完美融合的关键。
再比如说,在一个大公司里,有不同的部门,研发部门搞技术,市场部门搞推广。
这就好像是两个不同的领域,如果没有一个好的沟通和协作机制,那很容易就会出现混乱。
这时候桥接模式就发挥作用啦,它让研发的成果能够顺利地传递到市场部门,让市场部门能更好地把产品推向客户。
你看,桥接模式多重要啊!它让看似不相关的东西能够连接起来,发挥出更大的作用。
就像把一颗颗散落的珍珠串起来,变成一条美丽的项链。
在我们的生活中,不也有很多这样的情况吗?比如我们的兴趣爱好和工作,如果能找到一个合适的桥接模式,说不定就能把爱好变成事业,那该多棒啊!或者是不同的人际关系,通过桥接模式能让大家更好地相处和合作。
而且啊,桥接模式还特别灵活。
它不是那种死板的连接,而是可以根据实际情况进行调整和变化。
就像那座桥可以变宽变窄,可以有不同的坡度,以适应不同的需求。
它让我们能够打破常规,不再局限于一种固定的模式。
这样我们就能有更多的创新和可能性啦!所以说啊,桥接模式可不是什么可有可无的东西,它是能让我们的世界变得更加丰富多彩的魔法呀!大家可千万别小瞧了它,要好好去发现和运用它,让我们的生活变得更加美好,更加有趣!这就是我对桥接模式的理解,你们觉得呢?。
设计模式之桥接模式(Bridge)详解及代码示例

设计模式之桥接模式(Bridge)详解及代码⽰例⼀、桥接模式的定义 桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独⽴变化。
它是⽤组合关系代替继承关系来实现,从⽽降低了抽象和实现这两个可变维度的耦合度。
⽐如设想如果要绘制矩形、圆形、椭圆、正⽅形,我们⾄少需要4个形状类,但是如果绘制的图形需要具有不同的颜⾊,如红⾊、绿⾊、蓝⾊等,此时⾄少有如下两种设计⽅案:第⼀种设计⽅案是为每⼀种形状都提供⼀套各种颜⾊的版本。
第⼆种设计⽅案是根据实际需要对形状和颜⾊进⾏组合。
采⽤⽅案⼆来进⾏设计系统中类的个数更少,且系统扩展更为⽅便。
设计⽅案⼆即是桥接模式的应⽤。
桥接模式将继承关系转换为关联关系,从⽽降低了类与类之间的耦合,减少了代码编写量。
⼆、桥接模式优缺点 桥接(Bridge)模式的优点是:由于抽象与实现分离,所以扩展能⼒强;其实现细节对客户透明。
缺点是: 由于聚合关系建⽴在抽象层,要求开发者针对抽象化进⾏设计与编程,这增加了系统的理解与设计难度。
三、桥接模式的实现 可以将抽象化部分与实现化部分分开,取消⼆者的继承关系,改⽤组合关系。
桥接(Bridge)模式包含以下主要⾓⾊。
抽象化(Abstraction)⾓⾊:定义抽象类,并包含⼀个对实现化对象的引⽤。
扩展抽象化(Refined Abstraction)⾓⾊:是抽象化⾓⾊的⼦类,实现⽗类中的业务⽅法,并通过组合关系调⽤实现化⾓⾊中的业务⽅法。
实现化(Implementor)⾓⾊:定义实现化⾓⾊的接⼝,供扩展抽象化⾓⾊调⽤。
具体实现化(Concrete Implementor)⾓⾊:给出实现化⾓⾊接⼝的具体实现。
其结构图如图所⽰: 其实现如下:public class BridgeTest{public static void main(String[] args){Implementor imple=new ConcreteImplementorA();Abstraction abs=new RefinedAbstraction(imple);abs.Operation();}}//实现化⾓⾊interface Implementor{public void OperationImpl();}//具体实现化⾓⾊class ConcreteImplementorA implements Implementor{public void OperationImpl(){System.out.println("具体实现化(Concrete Implementor)⾓⾊被访问" );}}//抽象化⾓⾊abstract class Abstraction{protected Implementor imple;protected Abstraction(Implementor imple){this.imple=imple;}public abstract void Operation();}//扩展抽象化⾓⾊class RefinedAbstraction extends Abstraction{protected RefinedAbstraction(Implementor imple){super(imple);}public void Operation(){System.out.println("扩展抽象化(Refined Abstraction)⾓⾊被访问" );imple.OperationImpl();}}四、桥接模式的应⽤实例 由于桥接模式上⾯描述⽐较抽象,此处再举⼀个关于包的例⼦进⾏分析:⼥⼠⽪包有很多种,可以按⽤途分、按⽪质分、按品牌分、按颜⾊分、按⼤⼩分等,存在多个维度的变化,所以采⽤桥接模式来实现⼥⼠⽪包的选购⽐较合适。
桥接模式的应用场景

桥接模式的应用场景1. 引言1.1 什么是桥接模式桥接模式是一种结构型设计模式,用于将抽象部分与实现部分分离,使它们可以独立变化而互不影响。
在桥接模式中,抽象部分和实现部分分别由抽象类和实现类来表示,它们通过桥接接口进行连接。
抽象类定义了对于操作的抽象方法,而实现类则实现了这些方法。
通过这种方式,客户端可以通过抽象类来调用实现类的方法,从而将具体的实现细节与抽象部分分离开来。
桥接模式的作用在于提高系统的灵活性和可维护性。
通过将两个独立变化的维度进行解耦,桥接模式使得系统能够更容易地应对变化,同时也能够更方便地扩展和修改。
桥接模式还能够使得系统更易于理解和维护,因为抽象部分和实现部分的关系变得清晰明了。
桥接模式是一种非常重要且实用的设计模式,能够在许多场景中发挥重要作用。
在接下来的内容中,我们将更详细地探讨桥接模式的特点和优势,以及它在实际应用中的具体场景和优势。
1.2 桥接模式的作用桥接模式的作用是将抽象部分与它的实现部分分离,使它们可以独立地变化。
通过桥接模式,可以实现多个维度的变化,从而提高系统的灵活性和可维护性。
具体来说,桥接模式可以帮助我们在不改变抽象部分的前提下,动态地改变其实现部分,从而满足不同的需求。
桥接模式还可以降低系统的复杂性,将系统划分为多个独立的部分,降低它们之间的耦合度。
桥接模式的作用主要体现在以下几个方面:分离抽象和实现、实现多个维度的变化、提高系统的灵活性和可维护性、降低系统的复杂性。
通过桥接模式,可以更好地管理系统中不同部分的变化,提高系统的可扩展性和可维护性。
桥接模式在软件开发中有着广泛的应用,可以用来处理各种不同的问题,提高系统的设计质量和开发效率。
在接下来的内容中,我们将深入探讨桥接模式的具体应用场景和优势,以及与其他模式的比较。
【2000字】2. 正文2.1 分离抽象和实现在桥接模式中,分离抽象和实现是一项重要的设计原则。
通过桥接模式,我们可以将抽象部分与实现部分分离,使它们可以独立变化,互不影响。
Python中的桥接模式

Python中的桥接模式Python中的桥接模式桥接模式是一种软件设计模式,通过将抽象部分与实现部分分离来实现解耦,使得两者可以独立地变化。
在Python中,桥接模式可以帮助我们优雅地解决面向对象编程中的一些常见问题,例如类的扩展性、代码的可读性和可维护性等。
1.桥接模式的基本概念桥接模式的核心思想是:将实现部分与抽象部分分离,使它们可以独立地变化。
在桥接模式中,抽象部分通常是一个抽象类或者接口,它定义了一些基本的功能和方法,但是没有具体的实现。
而实现部分则是一个或多个实现类,它们实现了抽象部分中定义的方法和功能。
通过抽象部分和实现部分之间的桥梁,我们可以将它们连接起来,达到解耦的目的。
桥梁通常是一个包含抽象部分对象和实现部分对象的组合对象。
通过桥梁对象,我们可以将抽象部分和实现部分有效地分离,从而实现更好的可扩展性和可维护性。
2.桥接模式的应用场景桥接模式通常适用于以下几种场景:(1)有多个相互独立的变化维度,且需要在运行时动态组合。
(2)需要隔离抽象部分和实现部分,使得它们可以独立地变化。
(3)需要跨越多个平台或者多个系统。
(4)需要实现松耦合的设计。
(5)需要支持扩展性和可维护性。
在Python中,桥接模式可以应用于很多地方,例如图形用户界面编程、网络编程、数据库编程等。
例如,在图形用户界面编程中,我们可以使用桥接模式来解耦控件和控件容器的关系。
控件容器可以是一个窗口、一个面板或者一个对话框,而控件可以是一个按钮、一个文本框或者一个列表框。
通过使用桥梁对象,我们可以将控件和控件容器有效地解耦,从而实现松耦合的设计。
3.一个桥接模式的示例——文本框和窗口的组合下面,我们通过一个简单的示例来介绍Python中桥接模式的应用。
这个示例演示了如何通过桥接模式将文本框和窗口的关系进行解耦。
首先,我们定义一个抽象类Component,它包含了一个抽象方法draw。
然后,我们定义两个具体的实现类:TextField和Window,它们分别实现了Component中的draw方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/kalen_chen/archive/2007/05/21/1619498.aspx概述在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度”的变化?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就是要使用Bridge模式。
意图将抽象部分与实现部分分离,使它们都可以独立的变化。
结构图图1Bridge模式结构图生活中的例子桥接模式将抽象部分与它的实现分离,使它们能够独立地变化。
一个普通开关控制的电灯、电风扇等等,都是桥接的例子。
开关的目的是将设备打开或关闭。
实际的开关可以是简单的双刀拉链开关,也可以是调光开关。
图2使用电子开关例子的桥接对象图桥接模式解说在创建型模式里面,曾提到过抽象与实现,抽象不应该依赖于具体实现细节,实现细节应该依赖于抽象。
看下面这幅图:图3抽象不应该依赖于实现细节在这种情况下,如果抽象B稳定,而实现细节b变化,这时用创建型模式来解决没有问题。
但是如果抽象B也不稳定,也是变化的,该如何解决?这就要用到Bridge模式了。
我们仍然用日志记录工具这个例子来说明Bridge模式。
现在我们要开发一个通用的日志记录工具,它支持数据库记录DatabaseLog和文本文件记录FileLog两种方式,同时它既可以运行在.NET平台,也可以运行在Java平台上。
根据我们的设计经验,应该把不同的日志记录方式分别作为单独的对象来对待,并为日志记录类抽象出一个基类Log出来,各种不同的日志记录方式都继承于该基类:图4Log类结构图实现代码如下:public abstract class Log...{public abstract void Write(string log);}public class DatabaseLog : Log...{public override void Write(string log)...{//......Log Database}}public class TextFileLog : Log...{public override void Write(string log)...{//......Log Text File}}另外考虑到不同平台的日志记录,对于操作数据库、写入文本文件所调用的方式可能是不一样的,为此对于不同的日志记录方式,我们需要提供各种不同平台上的实现,对上面的类做进一步的设计得到了下面的结构图:实现代码如下:public class NDatabaseLog : DatabaseLog...{public override void Write(string log)...{//......(.NET平台)Log Database}}public class JDatabaseLog : DatabaseLog...{public override void Write(string log)...{//......(Java平台)Log Database}}public class NTextFileLog : TextFileLog...{public override void Write(string log)...{//......(.NET平台)Log Text File}}public class JTextFileLog : TextFileLog...{public override void Write(string log)...{//......(Java平台)Log TextFile}}现在的这种设计方案本身是没有任何错误的,假如现在我们要引入一种新的xml文件的记录方式,则上面的类结构图会变成:如图中蓝色部分所示,我们新增加了一个继承于Log基类的子类,而没有修改其它的子类,这样也符合了开放-封闭原则。
如果我们引入一种新的平台,比如说我们现在开发的日志记录工具还需要支持Borland平台,此时该类结构又变成了:同样我们没有修改任何东西,只是增加了两个继承于DatabaseLog和TextFileLog的子类,这也符合了开放-封闭原则。
但是这样的设计是脆弱的,仔细分析就可以发现,它还是存在很多问题,首先它在遵循开放-封闭原则的同时,违背了类的单一职责原则,集即一个类只有一个引起它变化的原因,而这里引起Log类变化的原因却有两个,即日志记录方式的变化和日志记录平台的变化;其次是重复代码会很多,不同的日志记录方式在不同的平台上也会有一部分的代码是相同的;再次是类的机构过于复杂,继承关系太多,难于维护;最后最致命的一点是扩展性太差。
上面我们分析的变化只是沿着某一个方向,如果变化沿着日志记录方式和不同的运行平台两个方向变化,我们会看到这个类的结构会迅速变得庞大。
现在该是Bridge模式粉墨登场的时候了,我们需要解耦这两个方面的变化,把它们之间的强耦合关系改成弱联系。
我们把日志记录方式和不同平台上的实现分别当作两个独立的部分来对待,对于日志记录方式,类结构图仍然是:现在我们引入另外一个抽象类ImpLog,它是日志记录在不同平台上实现的基类,结构图如下:实现代码如下:using System;using System.Collections.Generic;using System.Text;namespace BridgePattern...{/**//// <summary>/// 功能:ImpLog类/// 编写:Kalen_Chen/// 日期:2007年5月21日/// </summary>public abstract class ImpLog...{public abstract void Execute(string msg);}}using System;using System.Collections.Generic;using System.Text;namespace BridgePattern...{/**//// <summary>/// 功能:NImpLog类/// 编写:Kalen_Chen/// 日期:2007年5月21日/// </summary>public class NImpLog : ImpLog...{public override void Execute(string msg)...{Console.WriteLine(".NET平台:" + msg);}}}using System;using System.Collections.Generic;using System.Text;namespace BridgePattern...{/**//// <summary>/// 功能:JImpLog类/// 编写:Kalen_Chen/// 日期:2007年5月21日/// </summary>public class JImpLog : ImpLog...{public override void Execute(string msg)...{Console.WriteLine("Java平台:" + msg);}}}这时对于日志记录方式和不同的运行平台这两个类都可以独立的变化了,我们要做的工作就是把这两部分之间连接起来。
那如何连接呢?在这里,Bridge使用了对象组合的方式,类结构如下:实现代码如下:using System;using System.Collections.Generic;using System.Text;namespace BridgePattern...{/**//// <summary>/// 功能:Log类/// 编写:Kalen_Chen/// 日期:2007年5月21日/// </summary>public abstract class Log...{protected ImpLog implementor;public ImpLog Implementor...{set...{implementor = value;}}public virtual void Write(string log)...{implementor.Execute(log);}}}using System;using System.Collections.Generic;using System.Text;namespace BridgePattern...{/**//// <summary>/// 功能:DatabaseLog类/// 编写:Kalen_Chen/// 日期:2007年5月21日/// </summary>public class DatabaseLog :Log...{public override void Write(string log)...{implementor.Execute(log);}}}using System;using System.Collections.Generic;using System.Text;namespace BridgePattern...{/**//// <summary>/// 功能:TextFileLog类/// 编写:Kalen_Chen/// 日期:2007年5月21日/// </summary>public class TextFileLog :Log...{public override void Write(string log)...{implementor.Execute(log);}}}可以看到,通过对象组合的方式,Bridge模式把两个角色之间的继承关系改为了耦合的关系,从而使这两者可以从容自若的各自独立的变化,这也是Bridge模式的本意。
再来看一下客户端如何去使用:using System;using System.Collections.Generic;using System.Text;namespace BridgePattern...{/**//// <summary>/// 功能:客户端调用/// 编写:Kalen_Chen/// 日期:2007年5月21日/// </summary>class Program...{static void Main(string[] args)...{//.NET平台下的Database LogLog dblog = new DatabaseLog();dblog.Implementor = new NImpLog();dblog.Write("DatabaseLog");//Java平台下的Text File LogLog txtlog = new TextFileLog();txtlog.Implementor = new JImpLog();txtlog.Write("TextFileLog");Console.ReadLine();}}}可能有人会担心说,这样不就又增加了客户程序与具体日志记录方式之间的耦合性了吗?其实这样的担心是没有必要的,因为这种耦合性是由于对象的创建所带来的,完全可以用创建型模式却解决。