以不变应万变---桥接模式

我们在项目开发的时候,尽量将不变的放在基类中,而让变化的部分在继承类中实现。但是在原始代码设计时,尽量先聚合--合成的设计原则,后在考虑用继承的方式(is-a 则考虑用继承方式);这样在后续维护的时候,就减少维护工作量。桥接模式就是这种方式。

什么是桥接模式?将抽象部分与它实现的部分分离,使得他们都可以独立地变化。嘻嘻,有点不好理解,转换一下:实现系统可能有多个角度分类,每一种分类都有可能变化,那么就把这多种角度分离出来让他们独立变化,减少他们之间的耦合性。项目开发中,我们大部分都要求要面向接口编程;实际上就是让变化部分独立出来,并在另外的地方实现对对象实例的引用,这样保证变化部分的修改不会影响接口本身的调用。

代码区域:

//Implementor 抽象类,声明一个实现的方法
abstract class Implementor
{
	public abstract void Operation();
}
//ConcreteImplementorA 具体实现的方法
class  ConcreteImplementorA:Implementor
{
	public override void Operation()
	{
		Console.WriteLine("具体的实现方法1");
	}
}
//ConcreteImplementorB 具体实现的方法
class  ConcreteImplementorB:Implementor
{
	public override void Operation()
	{
		Console.WriteLine("具体的实现方法2");
	}
}
//Abstraction 抽象
class Abstraction
{
	protected Implementor implementor;
	public void SetImplementor(Implementor implementor)
	{
		this.implementor=implementor;
	}
	public virtual void Operation()
	{
		implementor.Operation();
	}
}
//RefinedAbstraction 类
class RefinedAbstraction:Abstraction
{
	public override void Operation()
	{
		implementor.Operation();
	}
}
//客户端代码
static void Main(string[] arg)
{
	Abstraction a=new RefinedAbstraction();
	a.SetImplementor(new ConcreteImplementorA());
	//调用具体的1实现
	a.Operation();

	a.SetImplementor(new ConcreteImplementorB());
	//调用具体的2实现
	a.Operation();
}

Android系统为什么能够在生产不同的生产手机厂商的兼容,我想应该有这个设计模式的功劳吧。

时间: 2024-10-29 04:42:06

以不变应万变---桥接模式的相关文章

第24课 《前端之路,以不变应万变》

今天的内容有些借鉴于业内大佬的内容,由于本人技术实在太渣,几乎没有可以用来演讲的素材.抱歉 大家好,我是来自存勖科技的Rocken.我今天演讲的内容是:前端的未来.大家都知道,前端所依托的基础直到上世纪九十年代才出现,前端职位也是近十年才出现的.之前大多数是后端工程师在做前端的事情,随着前端内容的不断增加,前端方面的工作也越来越多,这时候如果全部由后端来做的话就不大现实了.所有就出现了咱们前端工程师这个物种.我相信在座的各位都有一种感觉,那就是发展太快了.各种框架.工具层出不穷,我记得当初发布d

浅说解决VMware桥接模式连接主机

内容概要: 1: 搞懂VMware的桥接,NAT,HostOnly三种模式的意义. 2: 分别示范,CentOS 6,CentOS 7的手动分配固定虚拟机的IP地址. 3: 使用桥接方法ping通主机,并用Xshell远程控制. 解决的问题: 1: 虚拟机上不了网. 2: 无法ping通主机或远程连接. 3: 网卡启动总是失败,报错. 写作目的: 初装linux后,我们会习惯性的ping一下主机,看看虚拟机是否和主机连接正常,若正常便会迫不及待的用Xshell远程连接虚拟机,进行验证并操作.可安

Javascript设计模式理论与实战:桥接模式

桥接模式将抽象部分与实现部分分离开来,使两者都可以独立的变化,并且可以一起和谐地工作.抽象部分和实现部分都可以独立的变化而不会互相影响,降低了代码的耦合性,提高了代码的扩展性. 基本理论 桥接模式定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化.桥接模式主要有4个角色组成:(1)抽象类(2)扩充抽象类(3)实现类接口(4)具体实现类根据javascript语言的特点,我们将其简化成2个角色:(1)扩充抽象类(2)具体实现类怎么去理解桥接模式呢?我们接下来举例说明 桥接模式的实现 理解桥

设计模式【桥接模式】

桥接模式是一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿. 桥接模式的做法是把变化部分抽象出来,使变化部分与主类分离开来,从而将多个维度的变化彻底分离.最后,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要. [转载使用,请注明出处:http://blog.csdn.net/mahoking] 应用场景: 例如,某个系统有信息提醒的功能,其中信息提醒包括,短信提醒SMS,邮件提醒Ma

iOS设计模式——桥接模式

何为桥接模式? 桥接模式的目的是把抽象层次结构从其实现中分离出来,使其能够独立变更.抽象层定义了供客户端使用的上层的抽象接口.实现层定义了供抽象层使用的底层接口.实现类的引用被封装于抽象层的实例中,桥接就形成.(与外观模式有一定的相似之处). 桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化. 何时使用桥接模式? @:不想在抽象与其实现之间形成固定的绑定关系,这样就能在运行时切换实现. @:抽象及其实现都应可以通过子类化独立进行扩展. @:对抽象的实现进行修改不应影响客户端代码.

使用桥接模式时要注意的问题

什么是桥接模式?举个例子:平时我们我们的USB(Universal Serial Bus(通用串行总线)),其实其设计的模式就是桥接模式.桥接模式的作用就是:将抽象部份与它的实现部份分离,使它们都可以独立地变化.也就是说无论USB插的是U盘,还是小风扇.都只是外部的独立变化,电脑内部是不受影响.不扯远了,这里不是主要说桥接模式的用法.下面看看使用桥接模式需要注意一个小小的问题.http://blog.csdn.net/yitouhan/article/details/41443221 #ifnd

桥接模式理解

桥接模式的目的是为了建立稳定的抽象层依赖. http://blog.csdn.net/xiaoxian8023/article/details/6937589 桥接模式将抽象部分与它的实现部分分离,是它们都可以独立地变化.它很好的支持了开闭原则和组合锯和复用原则.实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这些多角度分离出来让他们独立变化,减少他们之间的耦合. 2个相互耦合的系列,每个系列都有各自的产品变动.将这2个系列抽象成2个角色类,将各自的变化封装到对象的角色类中,然后再将2

[OOD] 隔离变化-桥接模式

背景 正如电脑主机和显示器之间,主机的配置千变万化,不断升级,显示器可能升级缓慢.如果这时你买的是一体机,硬件升级就要受到限制.这就是一个典型的分离变化的需求场景. 在应用中,一个业务会有多个协作者,直接耦合会导致其中一个类的变化就会影响其它类的行为.这时最好的做法是对行为进行抽象,区分出变与不变,或者核心与外围的部分,然后定义出接口来隔离变化. 以Chromium的主文档加载为例.FrameLoader负责一个Frame的加载逻辑,从开始加载(load())或者重新加载(reload()),到

《JAVA与模式》之桥接模式

桥接模式是一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿. 桥接模式的做法是把变化部分抽象出来,使变化部分与主类分离开来,从而将多个维度的变化彻底分离.最后,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要. 举个例子,对于笔记本的CPU评测,当安装Intel CPU的时候 评测分数比较高,而安装AMD CPU的时候,则评测分数相对低一些,这个是一唯影响,而配合上电脑品牌,就是二维影