`
airu
  • 浏览: 270782 次
  • 性别: Icon_minigender_1
  • 来自: 云南
社区版块
存档分类
最新评论

每天一个(设计模式)-- Bridge模式(桥接模式)

 
阅读更多
对于一个初学者来说,往往容易滥用类。一切皆类,所以,类在设计中便爆炸般增长了。
对于这类问题,我们有很多模式来解决,但是我认为根本的还是要搞清楚,什么时候可以创建一个新的类。Martin大叔的 重构,Kent大叔的TDD,都给我们提出了一些解决方法。

这里我们不讨论这么高深的问题,而是从GOF的设计模式入手,来看看,类是如何泛滥,又是如何通过桥接来解决的。这也正是面向对象中的关键之处。

桥接,顾名思义,在接口与实现之间,架设一座桥梁,这座桥,其实并非是为了过河,而是隔离接口与实现。这就是著名的OO原则:DIP,ISP,依赖倒置(细节依赖抽象,抽象不依赖细节,接口隔离)。下面看桥接的UML:





例子还是从形状说起。每个形状都要求能绘制自己。我们有很多形状,很多画法。
首先我们定义一个接口。shape
public interface Shape {
	public void draw();
}


于是,你接下来怎么做?各种实现,例如:
public class Circle implements Shape{

	private int x;
	private int y;
	private int r;
	public Circle(int x, int y, int r){
		this.x = x;
		this.y = y;
		this.r = r;
	}
	@Override
	public void draw() {
		// TODO Auto-generated method stub
		//invoke the draw method
	
		JFrame frame = new JFrame();
		Graphics g = frame.getGraphics();
		g.drawOval(x, y, r, r);
	}

}


于是,需求又要画Rectangle了。我们继续写Rectangle,然后还要画Polygon,
这没什么问题,也就是类多一点,但是都是必须的。
继续,用户突然要我们画一个同心圆了。再编码完后,你可能发现,所有这些draw函数中,我们重复了太多的代码。不要紧,我们继续,这时候,客户举得应该有铅笔画的形状和钢笔画的形状,这下怎么办? 没有一种形状再加上绘图用的工具吧。现在是时候抽象了。

首先抽象出一个Drawing的接口,我们使用这个接口来作为绘图的抽象类。这样不需要每次都要实际的绘图。这里需要注意的是,我们如果直接使用draw来作为接口,那么这个粒度太大,因为实际中的绘制,可能会分成很多的步骤和细节,于是我们就在接口处,设置最小的粒度,这样,更能适应不同需求。
public interface Drawing {
	public void drawLine();
	public void drawCircle();
}

这里简化为画直线和圆。
有了接口,我们就看看有些什么不同的实现吧。要绘制,我们先选用铅笔:
public class PencilDraw implements Drawing{

	@Override
	public void drawLine() {
		// TODO Auto-generated method stub
		//This line is drawn by pencil
		System.out.println("pencil is drawing a line...");
		//do drawing
	}

	@Override
	public void drawCircle() {
		// TODO Auto-generated method stub
		//This circle is drawn by pencil
		System.out.println("pencil is drawing a circle...");
		//do drawing
	}

}


这里,做了很多简化。实际的绘制,可能使用原有系统,可能需要提供绘制参数等等。

最后,我们看看如何使用:

public static void main(String args[]){
		Drawing draw = new PencilDraw();
		Shape rec = new Rectangle(draw);
		rec.draw();
	}

这样的好处是,对于已经存在的形状,他们并不需要关心谁来绘制他们,而是使用绘制接口。
也就是只针对接口,而不是具体的细节。

这就是桥接模式。使用一个接口,封装了具体的实现。这些实现在使用的时候可以灵活替换(LSP原则),更重要的是,当有新的需求时,我们只是使用新的实现替换一下老的实现,就可以了,而无需改变原来的形状的接口(OCP原则)。
  • 大小: 18.4 KB
分享到:
评论

相关推荐

    设计模式---桥接模式

    桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立进行变化。这种模式在软件工程中被广泛应用于处理组件之间的耦合问题,特别是当需要为同一抽象提供多种实现或者需要独立地改变它们时。 ...

    c++设计模式-结构型模式-桥接模式

    c++设计模式-结构型模式-桥接模式;qt工程,c++简单源码; 桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度...

    java常用设计模式-桥接模式

    桥接模式(Bridge Pattern)是一种常用的设计模式,它将抽象化和实现化解耦,使用封装、聚合以及继承等基本技术,将两个独立变化的维度通过抽象化的方式进行桥接,从而降低了它们之间的耦合度,使得系统更加灵活。...

    设计模式 - 桥接模式(C++实例)

    桥接模式是一种结构型设计模式,它将抽象部分与其实现部分分离,使得它们可以独立地进行变化。在C++编程中,桥接模式能够帮助我们设计出更灵活、可扩展的系统,允许我们在不修改原有代码的基础上更换或增加新的实现...

    设计模式之桥接模式BridgePattern

    桥接模式(Bridge Pattern)是设计模式中的一种结构型模式,它主要解决的是在软件设计中,当抽象和实现之间存在紧密耦合时,如何使这两者能够独立地变化。这种模式通过引入一个抽象层来分离接口和实现,使得它们可以...

    C#面向对象设计模式纵横谈(8):Bridge 桥接模式(结构型模式)

    在C#中,面向对象设计模式通常用于解决复杂度问题,桥接模式则是一种更为高级的设计策略。它通过引入一个抽象接口,将抽象类与其具体实现分离开来,形成两个独立的继承层次,这样抽象部分和实现部分都可以独立地进行...

    设计模式面面观(10):桥接模式(Bridge Pattern)-结构型模式

    创建型模式 (100%) 设计模式面面观(8):创建型模式总结 (100%) 设计模式面面观(9):适配器模式(Adapter Pattern)-结构型模式 (100%) 设计模式面面观(10):桥接模式(Bridge Pattern)-结构型模式 ...

    Bridge 桥接模式(结构型模式)

    桥接模式(Bridge Pattern)是一种结构型设计模式,它的主要目的是将抽象部分与实现部分分离,使得它们可以独立地进行变化。在软件工程中,这种分离有助于降低复杂性,提高代码的可维护性和可扩展性。桥接模式的核心...

    c++-设计模式之桥接模式(Bridge Pattern)

    桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与实现部分分离,使得两者可以独立地变化。这种模式常用于需要在多个维度上变化的场景,比如不同的形状和颜色,允许在不改变客户端代码的情况下增加新...

    设计模式的桥接模式的例子

    桥接模式是设计模式中的一种结构型模式,它旨在将抽象部分与实现部分解耦,使得它们可以独立地变化。这种模式将抽象类和它的实现类进行分离,通过一个抽象接口来连接它们,使得两者可以独立发展,增加了系统的灵活性...

    Bridge 桥接模式

    C#面向对象设计模式 Bridge 桥接模式 视频讲座下载

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题。这些模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师,通常被称为GoF(Gang of Four),在他们的经典著作...

    设计模式之桥接模式,内含可运行代码

    在桥接模式中,抽象类(Abstraction)不直接引用具体实现(Implementation),而是通过一个桥接类(Bridge)来引用,这样抽象部分与实现部分可以独立变化,提供了更大的灵活性。 首先,我们来看一下桥接模式的基本...

    C#面向对象设计模式纵横谈(8):Bridge 桥接模式(结构型模式) (Level 300)

    桥接模式(Bridge Pattern)是一种结构型设计模式,它旨在将抽象部分与其实现部分分离,使得它们可以独立地进行变化。在C#编程中,这种模式尤其有用,因为随着软件系统的复杂性增加,类的继承层次可能会变得难以管理...

    设计模式之桥接模式

    桥接模式(Bridge Pattern)是设计模式中的一种结构型模式,它的主要目的是将抽象部分与实现部分解耦,使得它们可以独立地进行变化。在桥接模式中,抽象类与其具体的实现类通过一个抽象的“桥”进行连接,使得抽象...

    桥接模式和策略模式的区别,内含可运行代码和两者详细区别

    桥接模式和策略模式是软件设计模式中的两种重要模式,它们在实现上有着相似之处,但各自的应用场景和设计理念有所不同。下面将详细阐述这两种模式的特点、区别以及它们在实际编程中的应用。 首先,桥接模式(Bridge...

    结构型模式之桥接模式(bridge)

    桥接模式是设计模式中的一种结构型模式,其主要目的是为了分离抽象部分和实现部分,以便两者能够独立地进行变化。这种模式的核心理念是通过引入一个抽象层来封装多种可能的实现,使得抽象和实现之间形成一种“桥接”...

    设计模式11桥接模式

    桥接模式(Bridge Pattern)是一种用于将抽象部分与其实现部分分离的设计模式,这样两者就可以独立变化。该模式属于对象结构型模式,有时也被称为柄体(Handle and Body)模式或接口(Interface)模式。 **英文定义...

Global site tag (gtag.js) - Google Analytics