结构型模式 06 桥接模式

桥接模式Bridge

最体现(聚合复用原则)
将抽象部分与他的实现部分分离,使他们都可以独立地变化
在这里插入图片描述
Abstraction:持有一个Implementor引用,即可包含抽象方法也可包含实例方法,所以一般是个抽象类(分离部分实现);
RefinedAbstraction:具体类 实现抽象方法,使用Implementor中方法
Implementpr:实现部分接口 声明要实现的抽象方法(接口)
ConcreteImplementor:具体方法实现类

实现部分是指 其抽象类和他的派生类用来实现的对象,让实现独立,使得它们各自的变化,而不会影响彼此,减小耦合。并且避免过度的继承使得子类过于臃肿
找出变化并封装

使用场景

实现系统有多角度分类,每一种分类都可能有变化。
继承体系中,有两个甚至多个方向的变化,那么就解耦这些不同方向的变化,通过对象组合的方式,把两个角色之间的继承关系改为了组合的
关系,从而使这两者可以应对各自独立的变化。

与适配器模式差异

适配器包裹的是一个 我们可能无法更改或者扩展其功能的类,我们仅仅想要在接口不兼容时使用要被包裹的类的某些功能,一般用于第三方系统与现有系统的继承。
桥接模式则不同,桥接模式本身是为了更好的扩展,采用接口或者继承的方式

与装饰模式的差异

桥接模式本身类并不稳定,我们想要它向多方面扩展;不断的为其插入实现
装饰模式本身要装饰的类是稳定的,我们通过包裹它来为其增加功能,这是动态的,可可在不需要时撤销享有的职责

实例

Abstraction

public abstract class Abstraction {
    protected Implement implement;

    public Abstraction(Implement implement) {
        this.implement = implement;
    }
    public abstract void method();
}

RefinedAbstraction:

public class ConcreteAbstraction extends Abstraction {

    public ConcreteAbstraction(Implement implement) {
        super(implement);
    }
    @Override
    public void method() {
        this.implement.method();
    }
}

Implementor:

public interface Implement {
    void method();
}

ConcreteImplementor:

public class Concrete1 implements Implement{
    @Override
    public void method() {
        System.out.println("执行方法1");
    }
}

public class Concrete2 implements Implement{

    @Override
    public void method() {
        System.out.println("执行方法2");
    }
}

测试

public class Test {
    public static void main(String[] args) {
        Implement i1 = new Concrete1();
        Implement i2 = new Concrete2();
        Abstraction abstraction = new ConcreteAbstraction(i2);
        abstraction.method();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值