Java设计模式-桥接模式
Posted xstxjs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java设计模式-桥接模式相关的知识,希望对你有一定的参考价值。
简介
桥接模式(Bridge Pattern)是一种结构性设计模式,它的主要作用是将抽象部分和实现部分解耦,使它们可以独立变化而不会互相影响。桥接模式最早由GoF(Gang of Four)提出,在《设计模式》一书中有详细的介绍。
桥接模式和其他设计模式的区别在于它关注的是如何将抽象和实现分离,从而达到灵活性和可扩展性的目的。与之相比,适配器模式关注的是如何将不兼容的接口转换成可兼容的接口,装饰者模式关注的是如何动态地为对象添加行为,而组合模式则是将对象组合成树形结构,以表示“部分-整体”的层次结构。
实现
假设我们正在构建一个图形用户界面(GUI)框架,我们需要支持多个操作系统和窗口管理器。我们可以使用桥接模式来实现这个功能。我们可以将操作系统和窗口管理器的实现分开,以便它们可以独立地变化。我们可以定义一个抽象的Window类,它有一个实现了WindowImpl接口的实例变量。WindowImpl接口表示窗口管理器的实现。我们可以定义一个操作系统的抽象类,它有一个实现了OsImpl接口的实例变量。OsImpl接口表示操作系统的实现。
下面是一个示例代码:
interface WindowImpl
void draw(int x, int y, int width, int height, String color);
class LinuxWindowImpl implements WindowImpl
public void draw(int x, int y, int width, int height, String color)
System.out.println("Drawing a Linux window at (" + x + ", " + y + ") with width " + width + ", height "
+ height + ", and color " + color);
class WindowsWindowImpl implements WindowImpl
public void draw(int x, int y, int width, int height, String color)
System.out.println("Drawing a Windows window at (" + x + ", " + y + ") with width " + width + ", height "
+ height + ", and color " + color);
abstract class Window
private WindowImpl impl;
public Window(WindowImpl impl)
this.impl = impl;
public void draw(int x, int y, int width, int height, String color)
impl.draw(x, y, width, height, color);
abstract class Os
private WindowImpl impl;
public Os(WindowImpl impl)
this.impl = impl;
public void drawWindow(int x, int y, int width, int height, String color)
Window window = createWindow(impl);
window.draw(x, y, width, height, color);
protected abstract Window createWindow(WindowImpl impl);
class LinuxOs extends Os
public LinuxOs(WindowImpl impl)
super(impl);
protected Window createWindow(WindowImpl impl)
return new LinuxWindow(impl);
class WindowsOs extends Os
public WindowsOs(WindowImpl impl)
super(impl);
protected Window createWindow(WindowImpl impl)
return new WindowsWindow(impl);
class LinuxWindow extends Window
public LinuxWindow(WindowImpl impl)
super(impl);
class WindowsWindow extends Window
public WindowsWindow(WindowImpl impl)
super(impl);
在这个例子中,WindowImpl接口表示窗口管理器的实现,LinuxWindowImpl和WindowsWindowImpl类分别是Linux和Windows操作系统的窗口管理器的实现。Window抽象类有一个实现了WindowImpl接口的实例变量,并且有一个draw方法,该方法将调用WindowImpl的draw方法。Os抽象类也有一个实现了WindowImpl接口的实例变量,并且有一个drawWindow方法,该方法将创建一个Window对象,并调用draw方法。LinuxOs和WindowsOs类分别是Linux和Windows操作系统的实现,它们都是Os抽象类的子类。它们实现了createWindow方法,并返回一个具体的Window对象。
优缺点
优点:
- 桥接模式可以将抽象部分和实现部分分离,使它们可以独立变化,从而达到灵活性和可扩展性的目的。
- 桥接模式可以让客户端代码仅关注抽象部分,而不必关注实现部分的细节
- 桥接模式可以减少继承的使用,因为继承是一种静态的方式,而桥接模式则是一种动态的方式。
缺点:
- 桥接模式需要增加额外的抽象和实现层次,从而增加系统的复杂度和理解难度。
- 桥接模式需要对系统进行重新设计,从而增加了开发的时间和成本。
运用场景:
桥接模式适用于以下情况:
- 当一个类存在两个独立变化的维度时,可以使用桥接模式来将它们解耦,从而使它们可以独立变化。
- 当一个类需要在运行时切换不同的实现时,可以使用桥接模式来实现这一需求。
- 当一个类的抽象和实现部分可以分别扩展时,可以使用桥接模式来实现这一需求。
总结
总的来说,桥接模式是一种结构性设计模式,它可以将抽象部分和实现部分解耦,从而使它们可以独立变化而不会互相影响。Java作为一门面向对象的编程语言,非常适合使用桥接模式来实现复杂的软件系统。
java设计模式之桥接模式
桥接模式
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法。其中,可以使用相同的抽象类方法但是不同的桥接实现类,来画出不同颜色的圆。
桥接模式所涉及的角色有:
抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用。
修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。
实现化(Implementor)角色:这个角色给出实现化角色的接口,但不给出具体的实现。必须指出的是,这个接 口不一定和抽象化角色的接口定义相同,实际上,这两个接口可以非常不一样。实现化角色应当只给出底层操作,而抽象化角色应当只给出基于底层操作的更高一层 的操作。
具体实现化(Concrete Implementor)角色:这个角色给出实现化角色接口的具体实现。
桥接模式UML图
以上是关于Java设计模式-桥接模式的主要内容,如果未能解决你的问题,请参考以下文章