- 定义
- 桥接模式即将抽象部分与它的实现部分分离开来,使他们都可以独立变化。
- 桥接模式将继承关系转化成关联关系,它降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量。抽象类和它的派生类用来实现自己的对象。
- 使用场景
- 当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。
- 当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。
- 当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时。
- UML结构图
下载.png
-
抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用。
-
修正抽象化(RefinedAbstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。
-
实现化(Implementor)角色:这个角色给出实现化角色的接口,但不给出具体的实现。必须指出的是,这个接口不一定和抽象化角色的接口定义相同,实际上,这两个接口可以非常不一样。实现化角色应当只给出底层操作,而抽象化角色应当只给出基于底层操作的更高一层的操作。
-
具体实现化(ConcreteImplementor)角色:这个角色给出实现化角色接口的具体实现。
1528771071-7554-a9d436f6426d8d4d166d2b427670.png
- 代码
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();
}
}
- 例子:
- 手机按照品牌分可以分为华为、小米、oppo、vivo等品牌,如果这些手机按照内存分又可以分为4G、6G、8G等等。假如我们每一种手机都想要玩一下,至少需要4*3个。做手机内存的是一个公司,想要做什么手机我们只需要让其两者搭配起来即可。有点类似于全球贸易分工明确的思想。如果是使用继承,先定义手机父类,再继承父类定义手机类,再为每种手机类写有特定内存的子类。
第一步:定义Implementor,这里定义手机内存接口
4e4a20a4462309f7081cb61623ff29f6d6cad6bd.jpeg
第二步:定义ConcreteImplementor,这里指具体的内存
内存这里定义了两种一种是6G,一种是8G
7acb0a46f21fbe0954dc66aa3a9129368544ad80.jpeg
第三步:定义Abstraction手机抽象类
ac6eddc451da81cb66c0b3020297f5130b2431d4.jpeg
第四步:定义Refined Abstraction(具体的手机品牌)
首先是华为
8ad4b31c8701a18b16042af8cfde220d2a38fe94.jpeg
然后是小米
3812b31bb051f81923afc63f8b456fe82f73e730.jpeg
第五步:测试一下
d62a6059252dd42a3b3cfd3852ca7eb0c8eab866.jpeg
代码就可以看出,购买手机的时候,品牌和内存两个维度是分开的。











网友评论