桥接模式的分析、结构图及基本代码



昨天探讨了访问者模式,今天来说说桥接模式:

定义:将抽象部分与它的实现部分分离,是它们可以独立地变化。

这并不是说,让抽象类与其派生类分离,因为这没有任何意义。实现指的是抽象类和它的派生类用来实现自己的对象。

理解:实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。

下面讲一下合成/聚合复用原则:

合成/聚合复用原则就是尽量使用合成/聚合,尽量不要使用类继承。聚合表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的‘拥有‘关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小的规模,并且不太可能增长为不可控制的庞然大物。

适用地方:仔细研究如果发现继承体系中,有两个甚至多个方向的变化,那么就解耦这些不同方向的变化,通过对象组合的方式,把两个角色之间的继承关系改为了组合的关系,从而使这两者可以应对各自独立的变化。一句话“找出变化并封装之”。

结构图:

基本代码:

using System;

using System.Collections.Generic;

using System.Text;

namespace 桥接模式

{

class Program

{

static void Main(string[] args)

{

Abstraction ab = new RefinedAbstraction();

ab.SetImplementor(new ConcreteImplementorA());

ab.Operation();

ab.SetImplementor(new ConcreteImplementorB());

ab.Operation();

Console.Read();

}

}

class Abstraction

{

protected Implementor implementor;

public void SetImplementor(Implementor implementor)

{

this.implementor = implementor;

}

public virtual void Operation()

{

implementor.Operation();

}

}

class RefinedAbstraction : Abstraction

{

public override void Operation()

{

implementor.Operation();

}

}

abstract class Implementor

{

public abstract void Operation();

}

class ConcreteImplementorA : Implementor

{

public override void Operation()

{

Console.WriteLine("具体实现A的方法执行");

}

}

class ConcreteImplementorB : Implementor

{

public override void Operation()

{

Console.WriteLine("具体实现B的方法执行");

}

}

}

桥接模式的分析、结构图及基本代码

时间: 2024-11-08 19:00:33

桥接模式的分析、结构图及基本代码的相关文章

C#设计模式系列:桥接模式(Bridge)

1.1定义 当一个抽象可能有多个实现时,通常用继承来进行协调.抽象类定义对该抽象的接口,而具体的子类则用不同的方式加以实现.继承机制将抽象部分与它的实现部分固定在一起,使得难以对抽象部分和实现部分独立地进行修改.扩充和重用. 如果一个抽象类或接口有多个具体实现子类,而这些子类之中有内容或概念上重叠,需要我们把抽象的共同部分各自独立开来:即原来是准备放在一个接口里,现在需要设计两个接口--抽象接口和行为接口.然后再分别针对各自的具体子类定义抽象接口和行为接口的方法和调用关系. 桥接模式的用意是将抽

桥接模式

一.目录概要 二.场景问题 假设要设计一个电脑商场管理系统的某个模块设计,电脑分为品牌和类型两个纬度,我们应该怎么解决?我们初学者最容易想到的办法就是利用继承的方式,那利用继承实现的类图又是什么样子呢?我们看图. 代码展示 package com.aaron.bridge; public interface Computer { public void sale(); } class Desktop implements Computer{ @Override public void sale(

设计模式解密(12)- 桥接模式

1.简介 定义:将抽象部分与实现部分分离,使它们都可以独立的变化. 主要解决:在多维可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活. 何时使用:实现系统可能有多个角度分类,每一种角度都可能变化. 如何解决:把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合. 注意事项:对于两个独立变化的维度,使用桥接模式再适合不过了. 英文:bridge 类型:结构型 2.问题引入 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面

桥接模式:探索JDBC的接口

一.目录概要 二.问题探究 需求:假设要设计一个电脑商场管理系统的某个模块设计,电脑分为品牌和类型两个纬度,我们应该怎么解决? 按照初学者的思路,利用继承就能简单粗暴的实现,那我们来看下这种思路的设计类图. 从电脑纬度划分 package com.aaron.bridge; public interface Computer { public void sale(); } class Desktop implements Computer{ @Override public void sale(

设计模式之(九)桥接模式(Bridge)

桥接模式是怎么诞生的呢?来看一个场景. 一个软件企业开发一套系统,要兼容所有的不同类型硬件和和各种操作系统.不同种类硬件主要是 电脑.平板电脑.手机.各种操作系统是苹果系统.windows 系统.Linux 系统.设计人员给出了需要适配的类图. 这个设计根据列出来了需要创建的 7 个类.通过集成的方式来实现.这样就实现了软件如要适配的软硬件的需要.但是有什么问题呢.很显然就是扩展起来笔记麻烦.例如:华为的鸿蒙操作系统出来了,而且是手机.平板.电脑都能用的操作系统.这样我们就需要扩展 3 个类.这

訪问者模式的分析、结构图及基本代码

 之前我对全部的23种设计模式作了一个小总结.如今我们来对每一种设计模式作具体的分析.首先是訪问者模式: 定义:表示一个作用于某对象结构中的各元素的操作.它可使你能够在不改变各元素的类的前提下定义作用于这些元素的新操作. 适用地方:訪问者模式的目的是要把处理从数据结构分离出来.非常多系统能够依照算法和数据结构分开,假设这种系统有比較稳定的数据结构.又有易于变化的算法的话.使用訪问者模式就是比較合适的,由于訪问者模式使得算法操作的添加变得easy. 优缺点:訪问者模式的长处就是添加新的操作非常

适配器模式的分析、结构图及基本代码

 下面说说适配器模式: 定义:将一个类的接口转换成客户希望的另一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 适用地方:在软件开发中,也就是系统的数据和行为都正确,但接口不符时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配.适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况. 注意:要在双方都不太容易修改的时候再使用适配器模式适配. 开放-封闭原则:是说软件实体(类.模块.函数等等)应该可以扩展,但

桥接模式之牛郎织女幸福牵手

这是一个很美丽的,千古流传的爱情故事,每到农历七月初七,相传牛郎织女鹊桥相会的日子,牛郎和织女被银河隔开,只允许每年的农历七月七日相见.为了让牛郎和织女能顺利相会.各地的喜鹊就会飞过来用大家的身体紧贴着搭成一座桥,此桥就叫做鹊桥.牛郎和织女便在这鹊桥上相会.我就会抬头仰望星空,寻找银河两边的牛郎星和织女星,希望能看到他们一年一度的相会...... 在牛郎织女相会的过程中,喜鹊是功不可没的大臣,我们今天的设计模式就从鹊桥开始说起---桥接模式,顾名思义,在接口与实现之间,架设一座桥梁,这座桥,其实

设计模式(7)--Bridge(桥接模式)--结构型

1.模式定义: 桥接模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式.桥接模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”. 2.模式特点: 桥接模式虽然不是一个使用频率很高的模式,但是熟悉这个模式对于理解面向对象的设计原则,包括“开-闭”原则以及组合/聚合复用原则都很有帮助.理解好这两个原则,有助于形成正确的设计思想和培养良好的设计风格. 桥接模式的用意是“将抽象化(Ab