设计模式-桥接模式

介绍

桥接模式(BridgePattern)也成为桥梁模式,是结构型设计模式之一。

定义

将抽象部分与实现部分分离,使他们都可以独立进行变化。

使用场景

  1. 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。

  2. 设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端是完全透明的。

  3. 一个构件有多于一个的抽象化角色和实现化角色,系统需要它们之间进行动态耦合。

  4. 虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计要求需要独立管理这两者。

UML类图

这里写图片描述
角色介绍:

  • Abstraction:抽象部分

该类保持一个对实现部分对象的引用,抽象部分中的方法需要调用实现部分的对象来实现,该类一般为抽象类。

  • RefindAbstraction:优化的抽象部分

抽象部分的具体实现,该类一般式对象部分的方法进行完善和扩展。

  • Implementor:实现部分

可以为接口活抽象类,其方法不一定要与抽象部分一直,一般情况下是实现部分提供基本的操作,而抽象部分定义的则是基于实现部分这些基本操作的业务方法。

  • ConcreteImplementorA/ConcreteImplementorB:实现部分的具体实现

完善实现部分中方法定义的具体逻辑

  • Client:客户类,客户端程序

优点

  • 分离抽象与实现
  • 灵活的扩展

缺点

  • 设计复杂

示例代码

Implementor

public interface IFunc {
    void doFunc();
}

具体实现

public class PhoneFunc implements IFunc{

    @Override
    public void doFunc() {
        System.out.println("打电话");
    }
}

public class PhotoFunc implements IFunc {

    @Override
    public void doFunc() {
        System.out.println("进行拍照");
    }
}

Abstraction

public abstract class MobilePhone {
    private IFunc mFunc;

    public MobilePhone(IFunc func) {
        this.mFunc = func;
    }

    public void doFunc() {
        mFunc.doFunc();
    }
}

RefindAbstraction

public class MobilePhoneFuncs extends MobilePhone  {
    public MobilePhoneFuncs(IFunc func) {
        super(func);
    }

    public void refindedDoFunc() {
        System.out.println("操作手机");
        doFunc();

    }
}

Test

public class TestBridge {
    public static void main(String[] args) {
        IFunc funcPhone = new PhoneFunc();
        IFunc funcPhoto = new PhotoFunc();

        System.out.println("----------");
        MobilePhoneFuncs funcsPhone = new MobilePhoneFuncs(funcPhone);
        funcPhone.doFunc();
        System.out.println("----------");
        MobilePhoneFuncs funcsPhoto = new MobilePhoneFuncs(funcPhoto);
        funcsPhoto.doFunc();
        System.out.println("----------");
    }
}

Log

----------
打电话
----------
进行拍照
----------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值